Python中urllib2的数据标准化问题

在使用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

猜你喜欢

转载自blog.csdn.net/joker_fei/article/details/73179048