使用python请求提交表单并获得结果

时间:2013-11-18 16:16:38

标签: python xml forms post python-requests

我不熟悉python的请求。我需要做一件事。这是一个链接:https://bugzilla.mozilla.org/buglist.cgi?bug_status=ASSIGNED&bug_status=REOPENED&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&query_format=advanced&resolution=---&resolution=FIXED&resolution=INVALID&resolution=WONTFIX&resolution=DUPLICATE&resolution=WORKSFORME&resolution=INCOMPLETE&resolution=SUPPORT&resolution=EXPIRED&resolution=MOVED&order=bug_id&limit=10

下面有一个xml按钮。如果单击此按钮,将获得xml页面。我希望我可以使用python代码自动获取xml内容。

xml按钮的该页面上的html是:

<form method="post" action="show_bug.cgi">
<input type="hidden" name="ctype" value="xml">
<input type="hidden" name="id" value="35">
<input type="hidden" name="id" value="36">
<input type="hidden" name="id" value="37">
<input type="hidden" name="id" value="38">
<input type="hidden" name="id" value="39">
<input type="hidden" name="id" value="41">
<input type="hidden" name="id" value="42">
<input type="hidden" name="id" value="43">
<input type="hidden" name="id" value="51">
<input type="hidden" name="id" value="61">
<input type="hidden" name="excludefield" value="attachmentdata">
<input type="submit" value="XML" id="xml">
</form>

我尝试使用请求。我尝试过这样的代码:

import requests
values = { 'submit': 'xml'}
req = requests.post('https://bugzilla.mozilla.org/buglist.cgi?bug_status=ASSIGNED&bug_status=REOPENED&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&query_format=advanced&resolution=---&resolution=FIXED&resolution=INVALID&resolution=WONTFIX&resolution=DUPLICATE&resolution=WORKSFORME&resolution=INCOMPLETE&resolution=SUPPORT&resolution=EXPIRED&resolution=MOVED&order=bug_id&limit=10',data=values)
print req.text

但是我遇到了错误。

有人可以帮我指出正确的请求用法吗?感谢。

2 个答案:

答案 0 :(得分:2)

您是如何安装requests的?如果您收到导入错误,则可能没有安装所有依赖项。请参阅此处的讨论:https://github.com/kennethreitz/requests/issues/513

此外,您似乎遇到了错误的网址。您不想获取原始buglist.cgi,您想要POST到show_bug.cgi,因为那是表单操作的目标。您还需要包含隐藏表单字段的所有值:

import requests
values = {}
values['ctype'] = 'xml'
# Multiple values for the same name are handled via array
values['id'] = [35, 36, 37, 38, 39, 41, 42, 43, 51, 61]
values['excludefield'] = 'attachmentdata'
req = requests.post('https://bugzilla.mozilla.org/show_bug.cgi', data=values)
print req.text

答案 1 :(得分:0)

import requests
values = { 'submit': 'xml'}
req = requests.post('https://bugzilla.mozilla.org/buglist.cgi?bug_status=ASSIGNED&bug_status=REOPENED&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&query_format=advanced&resolution=---&resolution=FIXED&resolution=INVALID&resolution=WONTFIX&resolution=DUPLICATE&resolution=WORKSFORME&resolution=INCOMPLETE&resolution=SUPPORT&resolution=EXPIRED&resolution=MOVED&order=bug_id&limit=10',data=values)
print req.text

似乎对我有用。