2

サーバーに送信する必要がある URL は次のようになります。

www.mysite.com/manager.php?checkbox%5B%5D=5&checkbox%5B%5D=4&checkbox%5B%5D=57&self=19&submit=Go%21

投稿データを次のように配置します。

data = {'checkbox%5B%5D': '4', ....and so on... 'self': '19', 'submit': 'Go%21'}

私はそれをエンコードします:

data = urllib.urlencode(orbs)

これが私がそれを実行する方法です:

resp = mechanize.Request('http://mysite.com/manager.php', data)
cj.add_cookie_header(resp)
res = mechanize.urlopen(resp)
print res.read()

そして、エラーは次のように述べています:私はアイテムを選択しませんでした。ネストされたフォームがあるため、 br.select_form(nr=0) を使用せずに正しく行うにはどうすればよいですか? ありがとう。

4

2 に答える 2

2

チェックボックスのフィールド名を二重にエンコードしました。checkbox[]の代わりに使用する必要がありcheckbox%5B%5Dます。また、そのキー名が再利用されるため、辞書を使用して引数を収集することはおそらくできません。

于 2013-04-09T13:22:28.760 に答える
2

URL エンコーディングは文字列 (つまり '[]') をパーセントでエンコードされた文字列 (つまり '%5B%5D') に変更するプロセスであり、URL デコードはその反対の操作です。そう:

checkbox%5B%5D=5&checkbox%5B%5D=4&checkbox%5B%5D=57&self=19&submit=Go%21

デコード後です:

checkbox[]=5&checkbox[]=4&checkbox[]=57&self=19&submit=Go!

あなたのコードでは、すでにエンコードされた URL を実際にエンコードしています。

data = {'checkbox%5B%5D': '4', ....and so on... 'self': '19', 'submit': 'Go%21'}
data = urllib.urlencode(orbs)

代わりに、デコードされたデータを使用して urlencode に渡します。

data = {'checkbox[]': '4', ....and so on... 'self': '19', 'submit': 'Go!'}
data = urllib.urlencode(orbs)
于 2013-04-09T13:22:55.843 に答える