2

这是我的代码:

cj = cookielib.CookieJar()

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))

urllib2.install_opener(opener)

opener.add_data(json_data)  #runtime error on this line

r = None
try:
    r = opener.open(config.get_url())
except urllib2.HTTPError as e:
   print "..."

我收到运行时错误:opener.add_data(get_json) AttributeError: OpenerDirector instance has no attribute 'add_data'

如何向此请求添加请求 json 数据?

4

2 回答 2

1

如果您所做的只是发送请求,我强烈建议您使用请求:

import requests
    data = {"param": value}
    url = your_url
    cookie = your_cookie
    requests.get(your_url, data=data, cookie=cookie)

您可以访问响应的 ._content 属性以获取原始 http 响应。

有关更多请求文档,请参阅此内容。

这个要点应该让您很好地了解为什么应该使用请求而不是 urllib:https ://gist.github.com/kennethreitz/973705

于 2013-07-24T14:38:10.947 回答
0

将其作为open方法的参数提供(需要先进行 url 编码):

import urllib

try:
    r = opener.open(config.get_url(), data=urllib.urlencode(json_data))
except urllib2.HTTPError as e:
   print "..."

查看 open 方法的文档

OpenerDirector.open(url[, data][, timeout])

打开给定的 url(可以是请求对象或字符串),可选择传递给定的数据。

您可以通过注意这opener是一个urllib2.OpenDirector实例来找到文档:

>>> opener
<urllib2.OpenerDirector instance at 0x1011acef0>

或者通过做help(opener),这表明:

class OpenerDirector
 |  Methods defined here:
 |  
 |  __init__(self)
 |  
 |  add_handler(self, handler)
 |  
 |  close(self)
 |  
 |  error(self, proto, *args)
 |  
 |  open(self, fullurl, data=None, timeout=<object object>)
于 2013-07-24T14:37:09.347 回答