2

urllibとurllib2の組み合わせを使用して、フォームデータをPOSTしています。

これが私が提出する必要のあるフォームです

<form method="post" action="show_bug.cgi">
            <input type="hidden" name="ctype" value="xml">
            <input type="hidden" name="id" value="788604">
            <input type="hidden" name="id" value="793892">
            <input type="hidden" name="id" value="823569">
            <input type="hidden" name="id" value="823585">
            <input type="hidden" name="id" value="825904">
            <input type="hidden" name="id" value="827493">
            <input type="hidden" name="excludefield" value="attachmentdata">
            <input type="submit" value="XML" id="xml">
</form>

フォームのタプルのリストを作成しています[ (name,value), ... ]

送信タイプ要素には名前がないため、urllib/urllib2を使用してその要素を送信する方法と送信方法がわかりません。

このデータをshow_bug.cgiに投稿しようとすると、HTTP404エラーが発生します。

フォームをPOSTする方法、特に送信入力タイプについて混乱しています。これまでのところ、Submitタイプの値とIDは重要ではないと常に想定してきましたが、これまでのところ、それは私にとってはうまくいったようです。


これは、TamperDataによってキャプチャされたPOSTリクエストです。

POSTパラメータ

4

2 に答える 2

3

次のリクエストが機能します。

from urllib import urlencode
from urllib2 import urlopen


url = 'https://bugzilla.mozilla.org/show_bug.cgi'
data = urlencode([('ctype', 'xml'), ('id', [788604, 793892]),
                  ('excludefield', 'attachmentdata'),
                  ], doseq=True)
response = urlopen(url, data)
print(response.code) # -> 200
xml = response.read()

その場合doseq=True('id', [788604, 793892])としてエンコードされid=788604&id=793892ます。

がないdoseq場合('id', 788604), ('id', 793892)、同じ結果が得られます。

于 2013-03-11T20:01:55.500 に答える
3

requests図書館はどうですか?

それは物事をより簡単にします、ポストリクエストをする方法についてのドキュメントを見てください。

私はあなたがこのようにsmthをするべきだと思います:

import requests

host = "my_host/"
url = host + "show_bug.cgi"

params = {'ctype': 'xml', 
          'excludefield': 'attachmentdata',
          'id': [788604,...,827493],
          'xml': 'XML'}
response = requests.post(url, data=params)
于 2013-03-11T20:04:34.260 に答える