urllib2 で簡単な POST リクエストを実行しようとしています。ただし、サーバーの応答は、単純な GET を受信したことを示しています。送信リクエストのタイプを確認しましたが、POST に設定されています。
サーバーが期待どおりに動作するかどうかを確認するために、URL に連結された (以前の POST-) データを使用して GET 要求を実行しようとしました。これは私が期待した答えを得ました。
私が誤解したことを誰かが手がかりを持っていますか?
def connect(self):
url = 'http://www.mitfahrgelegenheit.de/mitfahrzentrale/Dresden/Potsdam.html/'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
header = { 'User-Agent' : user_agent }
values = {
'city_from' : 69,
'radius_from' : 0,
'city_to' : 263,
'radius_to' : 0,
'date' : 'date',
'day' : 5,
'month' : 03,
'year' : 2012,
'tolerance' : 0
}
data = urllib.urlencode(values)
# req = urllib2.Request(url+data, None, header) # GET works fine
req = urllib2.Request(url, data, header) # POST request doesn't not work
self.response = urllib2.urlopen(req)
これは、 Python URLLib / URLLib2 POSTで説明されているような問題のようですが、私の場合、末尾のスラッシュが欠落していないことは確かです。;)
これはばかげた誤解かもしれませんが、私はすでに何時間も疑問に思っています!
EDIT:印刷のための便利な機能:
def response_to_str(response):
return response.read()
def dump_response_to_file(response):
f = open('dump.html','w')
f.write(response_to_str(response))
編集 2: 解決策:
サイトとの実際のやり取りをキャプチャするツールを見つけましたhttp://fiddler2.com/fiddler2/。どうやら、サーバーは入力フォームからデータを取得し、数回リダイレクトしてから、このデータを単純に URL に追加して GET リクエストを作成します。
urllib2 ではすべて問題ありません。時間を無駄にしてしまったことをお詫びします。