在使用urllib2获取接口数据时一直显示服务器内部错误:
urllib2.HTTPError: HTTP Error 500: Internal Server Error
原因:请求数据传入错误。
错误代码:
import json
import urllib2
url = "http://xxxxxxxx.com/api/xxx/xxx/"
data = {
'service_name': 'service_name',
'components': '[]',
}
req = urllib2.Request(url, data = json.dumps(data))
res = urllib2.urlopen(req)
msg = json.loads(res.read())
print msg
此处需要将data进行标准化处理:
有时候你希望发送一些数据到URL(通常URL与CGI[通用网关接口]脚本,或其他WEB应用程序挂接)。在HTTP中,这个经常使用熟知的POST请求发送。这个通常在你提交一个HTML表单时由你的浏览器来做。
并不是所有的POSTs都来源于表单,你能够使用POST提交任意的数据到你自己的程序。一般的HTML表单,data需要编码成标准形式。然后做为data参数传到Request对象。编码工作使用urllib的函数而非urllib2。
正确代码:
import json
import urllib2
import urllib
url = "http://xxxxxxxx.com/api/xxx/xxx/"
data = {
'service_name': 'service_name',
'components': '[]',
}
req = urllib2.Request(url, data = urllib.urlencode(data))
res = urllib2.urlopen(req)
msg = json.loads(res.read())
print msg
注:其中,urllib.urlencode()主要作用是:将URL中的键值对以连接符&划分。
>>>import urllib
>>>data=urllib.urlencode({'name':'Jack','age':18})
>>>print data
age=18&name=Jack