使用Python提交表单时的问题
我正在使用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>
我正在创建一个包含元组的列表,格式是[ (名字, 值), ... ]
因为提交按钮没有名字,所以我不知道该怎么用urllib/urllib2发送这个元素。
当我尝试把这些数据发送到show_bug.cgi时,我收到了一个HTTP404错误。
我对如何提交表单感到困惑,特别是关于提交按钮的部分。到目前为止,我一直认为提交按钮的值和ID不重要,而且这似乎一直对我有效。
这是TamperData捕获的POST请求:
2 个回答
3
那requests
库怎么样呢?
这个库让事情变得更简单,具体可以看看文档,里面讲了怎么发送一个POST请求。
我想你可以这样做:
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)
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
,也就是说会把两个 ID 分开写。
如果没有设置 doseq
,那么 ('id', 788604), ('id', 793892)
也会得到同样的结果。