问题描述
我正在尝试将 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。我相信这会解决您的问题。