3

プログラムでフォームにデータを送信しようとしています。サーバーが送信内容を「気に入らない」という小さな問題が発生しています。苛立たしいことに、エラーメッセージや、問題の診断に役立つものはありません。それは、を押したときに開始したのと同じページに戻るだけbr.submit()です。

ブラウザで送信ボタンを手動でクリックすると、表示されるページに小さな「成功」が表示されます。メッセージ。スクリプトを介して送信する場合、そのようなメッセージは表示されません。さらに、変更は実際にはサーバーに投稿されていません。それは非常に奇妙で、私がこの振る舞いに初めて遭遇したときです。

Mechanizeのドキュメントを掘り下げると、これらの奇妙で診断が難しい問題の下で、ブラウザによって実際に送信されたリクエストヘッダーをコピーするのが最善であることがわかります。

私の質問は、呼び出したときにリクエストヘッダーが何であるかをどのように確認するかbr.submit()です。

サンプルコード

location = 'http://ww.mysite.com'

br = mechanize.Browser()
cj = mechanize.LWPCookieJar()
br.set_cookiejar(cj)

username = MY_USER_NAME
password = MY_PASSWORD
br.addheaders.append(('Authorization', 'Basic %s' % base64.encodestring('%s:%s' % (username, password))))

br.open(location)

br.select_form(nr=0)
br['text'] = 'MY JUNK TO SUBMIT'    #Text field. Can put anything
br['DropDown1'] = ['4']             #This is a dropdown of integer values
br['DropDown2'] = ['3']             #Also a dropdown of ints
br.submit()

フォームを送信するときに、どのヘッダーが送信されているかを確認するにはどうすればよいですか?

4

1 に答える 1

10

ブラウザまたは機械化が送信しているヘッダーを確認する方法を尋ねていますか?


ブラウザ

他のコメンテーターが言うように、Firebug(Firefox)、開発者ツール(IE'F12'、Chrome Developerツール、Opera Dragonfly)などのプラグインを使用して、ブラウザーから送信されたヘッダーを確認できます。


機械化

mechanizeを使用すると、次のような操作で送信されたヘッダーのコピーを取得できます。

import mechanize 

br = mechanize.Browser()
br.open("http://stackoverflow.com")
request = br.request
request.header_items()

この場合、これは

[('Host', 'stackoverflow.com'), ('User-agent', 'Python-urllib/2.7')]

その他/1回限り

1回限りのデバッグの場合と同様に、または何も提供されていない場合は、 Wiresharkを使用して、ネットワーク経由で送信されるヘッダーを確認できます。ヒント:次のようなフィルターを使用します(http.request.uri == "http://stackoverflow.com/")

于 2013-03-27T15:43:16.847 に答える