我想使用機械化發送POST,但是我的代碼有時不工作(我知道爲什麼)。我使用過機械化,斜紋和請求。隨着機械和斜紋它正在工作,並與要求它不是。可能我是以錯誤的方式做的。用機械化和請求發送POST。
我的機械化代碼。以下作品:
#!/usr/bin/env python
import sys
import urllib
import mechanize
from mechanize import ParseResponse, urlopen, urljoin
response = urlopen(url)
forms = ParseResponse(response, backwards_compat=False)
form = forms[0]
form["username"] = "avi"
form["password"] = "stackoverflow"
urlopen(form.click())
我的斜紋代碼。它也工作:
import os
import twill
from twill.commands import *
out = open(os.devnull,"w")
twill.set_output(out)
go(url)
formvalue("1", "username", "avi")
formvalue("1", "password", "stackoverflow")
submit()
go(url2) #some protected page
content = show()
print 'content is',content[:100]
從我所瞭解的,機械化或斜紋首先得到的頁面,填寫表格和發送表單。但問題在於,有時目標頁面顯示隨機頁面,沒有任何形式。在那種情況下,我收到一個錯誤,顯然是因爲沒有可以顯示的表單。我不想處理這個錯誤,因爲我已經知道帖子的網址。即使顯示了一些隨機頁面,在我點擊下一頁之後,也會載入相同的表單。 POST網址,字段都保持不變。所以我想直接發送POST請求,因爲我已經知道所有必需的細節。這裏是我的代碼,based on:
browser = mechanize.Browser()
parameters = {"username" : "avi",
"password" : "stackoverflow",
}
data = urllib.urlencode(parameters)
browser.open(post_url,data)
cool = browser.open(post_url + '%s' % data).read()
print cool
我得到一個錯誤:
urllib2.URLError: <urlopen error [Errno 61] Connection refused>
我試圖請求同樣的事情。但是我得到了和上面一樣的錯誤。下面是代碼:
import requests
from requests import session
payload = { 'username': 'avi','password': 'stackoverflow'}
url1 = 'http://example.com/login.php'
url2 = 'http://example.com/protected.php'
with session() as c:
c.post(url1, data=payload)
c.get(url2)
所以我戳在這裏和那裏,看了幾個代碼可在網上,我想是不是因爲工作,以防止CSRF。於是我去同一個頁面,斜紋布,做showforms看見有一定的價值與象徵:
下面是我想:
- 確實張貼了用機械化和要求(無需下載第一頁)
- 如何處理CSRF令牌?
- 如何調試「的urlopen錯誤[錯誤61]連接被拒絕」
我不能這樣做:http:// pastie。org/8367073我得到相同的錯誤 – avi
@avi聽起來像你的IP被封鎖了。您應該從另一臺主機嘗試或獲取新的IP(即重置您的adsl路由器)。 – Rolando
我試過了,但沒有成功。而且我的其他代碼與斜紋工作正常 – avi