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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值