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 インスタンスに属性 '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 に答える