基本上我想發送一個POST請求給下面的表單。在python中已經打開的url上發送POST請求
<form method="post" action="">
449 * 803 - 433 * 406 = <input size=6 type="text" name="answer" />
<input type="submit" name="submitbtn" value="Submit" />
</form>
我基本上想要做的就是通過網頁閱讀,找出形式的公式,算出答案,輸入答案作爲參數與POST請求發送,但沒有打開一個新的網址該頁面作爲每次打開頁面時出現的新等式,因此之前獲得的結果已過時。最後,我想獲取發送POST請求的結果頁面。我被困在必須發送POST請求而不打開新的URL實例的部分。另外,如果在POST請求之後再次通讀頁面,我將不勝感激。 (會打電話read()
就足夠了嗎?)
我目前的Python代碼看起來像這樣。
import urllib, urllib2
link = "http://www.websitetoaccess.com"
f = urllib2.urlopen(link)
line = f.readline().strip()
equation = ''
result = ''
file1 = open ('firstPage.html' , 'w')
file2 = open ('FinalPage.html', 'w')
for line in f:
if 'name="answer"' in line:
result = getResult(line)
file1.write(line)
file1.close()
raw_params = {'answer': str(result), 'submit': 'Submit'}
params = urllib.urlencode(raw_params)
request = urllib2.Request(link, params)
page = urllib2.urlopen(request)
file2.write(page.read())
file2.close()
在Web瀏覽器中手動執行此操作時出現的問題是,表單需要機器驅動的響應才能正確進行身份驗證,因爲它有超時並且無法在手動完成操作時進行身份驗證,因爲人類無法正確回答速度不夠快。 – ASCH
我試着按照你的建議使用請求,並且遇到了同樣的問題。我相信在你上面提供的代碼res2,它確實開始一個新的單獨的請求(這反過來改變了問題,因此使我以前存儲在答案res1錯誤的答案) – ASCH
這是可能這是一個頭問題或餅乾問題? POST請求是來自先前GET請求的單獨請求,它不能合併爲一個請求。您應該檢查標題和/或嘗試使用會話(如果使用請求,則很容易添加),http://docs.python-requests.org/en/master/user/advanced/)。 – Loknar