如何在python中使用pastebin API?[特定错误]

问题描述

我正在尝试将 pastebin api 与文档一起使用:python https://pastebin.com/doc_api。使用 urllib 库:https://docs.python.org/3/library/urllib.html.

import urllib.request
import urllib.parse

def main():

    def pastebinner():
        site = 'https://pastebin.com/api/api_post.PHP'
        dev_key = 
        code = "12345678910,test"      
        our_data = urllib.parse.urlencode({"api_dev_key": dev_key,"api_option": "paste","api_paste_code": code})  
        our_data = our_data.encode()                    
        resp = urllib.request.urlopen(site,our_data)
        print(resp.read())
        
    pastebinner()

if __name__ == "__main__":
    main()

这是我得到的错误

文件“C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.1520.0_x64__qbz5n2kfra8p0\lib\urllib\request.py",第 214 行,在 urlopen 中 返回 opener.open(url,data,timeout) 文件 "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.1520.0_x64__qbz5n2kfra8p0\lib\urllib\request.py",523线,开放中 response = meth(req,response) 文件“C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.1520.0_x64__qbz5n2kfra8p0\lib\urllib\request.py”, 第 632 行,在 http_response response = self.parent.error( 文件 "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.1520.0_x64__qbz5n2kfra8p0\lib\urllib\request.py",第 561 行,错误 return self._call_chain(*args) File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.1520.0_x64__qbz5n2kfra8p0\lib\urllib\request.py",第 494 行,在 _call_chain 中 结果 = func(*args) 文件 "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.1520.0_x64__qbz5n2kfra8p0\lib\urllib\request.py",第 641 行,在 http_error_default 中 引发 HTTPError(req.full_url,code,msg,hdrs,fp) urllib.error.HTTPError: HTTP Error 422: Unprocessable entity

关于出现此错误的原因有什么想法吗?

bump:我还是不知道请帮忙。 凹凸2: :v

解决方法

您正在使用 urllib.request.urlopen(site,our_data),它是一个 HTTP GET(Miniconda up to 4.8.3 supported Python 2 用于 urllib 中的任何内容)。您需要改为执行 HTTP POST。 default

请注意以下代码未经测试

import urllib.request
import urllib.parse


def main():

    def pastebinner():
        site = 'https://pastebin.com/api/api_post.php'
        dev_key = 'APIKEYGOESHERE'
        code = "12345678910,test"
        our_data = urllib.parse.urlencode({"api_dev_key": dev_key,"api_option": "paste","api_paste_code": code})
        our_data = our_data.encode()
        request = urllib.request.Request(site,method='POST')
        resp = urllib.request.urlopen(request,our_data)
        print(resp.read())

    pastebinner()


if __name__ == "__main__":
    main()

该错误非常无用。我的意思是,为什么不返回一个 Obligatory w3 link 呢?

,

留在这里以防其他人遇到这个问题。对此不是 100% 确定,稍后将测试 不要使用 URLLIB2 使用 httplib2。我相信这会解决您的问题。