9

私は urllib2 オープナーを持っていて、それをいくつかのデータを含む POST リクエストに使用したいと考えています。

投稿先のページのコンテンツと、返されたページの URL を受け取りたいと思っています (これは 30x コードに過ぎないと思います。そのため、これらの行に沿った何かが素晴らしいでしょう!)。

これをコードと考えてください:

anOpener = urllib2.build_opener(???,???)
anOpener.addheaders = [(???,???),(???,???),...,(???,???)]
# do some other stuff with the opener 
data = urllib.urlencode(dictionaryWithPostValues)
pageContent = anOpener.THE_ANSWER_TO_THIS_QUESTION
pageURL = anOpener.THE_SECOND_PART_OF_THIS_QUESTION
4

3 に答える 3

6

これは、ひとたび答えが分かると、とてもばかげた質問です。

使用するだけです:

open(URL,data)

最初の部分では、レイチェル・サンダースが言及したように、

geturl()

第二部のために。

ただし、リクエスト/オープナー全体がどのように機能するかは本当にわかりません。素敵なドキュメントが見つかりませんでした:/

于 2012-11-19T06:24:09.900 に答える
5

このページはあなたを助けるはずです:

http://www.voidspace.org.uk/python/articles/urllib2.shtml#data

import urllib
import urllib2

url = 'http://www.someserver.com/cgi-bin/register.cgi'
values = {'name' : 'Michael Foord',
      'location' : 'Northampton',
      'language' : 'Python' }

data = urllib.urlencode(values)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
the_page = response.read()
the_url  = response.geturl() # <- doc claims this gets the redirected url

.geturl() を使用する代わりに、response.info() を使用して Location ヘッダーを直接取得することもできるようです。

それが役立つことを願っています!

于 2012-11-19T06:03:24.317 に答える
0

リクエストにデータを追加すると、メソッドは自動的に POST に変更されます。次の例を確認してください。

import urllib2
import json

url = "http://server.local/x/y"
data = {"name":"JackBauer"}
method = "PUT"
request = urllib2.Request(url)
request.add_header("Content-Type", "application/json")
request.get_method = lambda: method
if data: request.add_data(json.dumps(data))
response = urllib2.urlopen(request)
if response: print response.read()

前述したように、GET/POST を使用する場合、ラムダは必要ありません。

于 2012-11-19T09:36:13.303 に答える