2

我正在使用 urllib、urllib2 的组合来发布一些表单数据。

这是我需要提交的表格

<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 错误。

我对如何发布表单感到困惑,尤其是提交输入类型。到目前为止,我一直认为 Submit 类型的 value 和 id 无关紧要,到目前为止它似乎对我有用。


这是 TamperData 捕获的发布请求

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=Truethen('id', [788604, 793892])被编码为id=788604&id=793892.

没有doseq('id', 788604), ('id', 793892)产生相同的结果。

于 2013-03-11T20:01:55.500 回答
3

requests图书馆呢?

它使事情变得更简单,请参阅有关如何发出发布请求的文档。

我想你应该这样做:

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 回答