簡體   English   中英

使用python發布表單時出現問題

[英]Issues posting a form using 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>

我正在創建形式為[ (name,value), ... ]的元組列表

由於提交類型元素沒有名稱,因此我不知道如何以及是否使用urllib / urllib2發送該元素。

當我嘗試將此數據發布到show_bug.cgi時,出現HTTP404錯誤。

我對如何發布表單(尤其是提交輸入類型)感到困惑。 到目前為止,我一直認為Submit類型的值和id無關緊要,到目前為止,它似乎對我有用。


這是TamperData捕獲的發布請求

POST參數

以下請求有效:

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)產生相同的結果。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM