avi*_*avi 5 python csrf twill python-requests mechanize-python
我正在尝试使用机械化发送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())
Run Code Online (Sandbox Code Playgroud)
我的斜纹代码。它也可以工作:
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]
Run Code Online (Sandbox Code Playgroud)
据我了解,机械化或斜纹首先获取页面,填写表格并发送表格。但是这里的问题是,有时目标页面显示随机页面,没有任何形式。在那种情况下,我会得到一个错误,显然是因为没有表格可以显示。我不想处理此错误,因为我已经知道帖子的网址。即使显示了一些随机页面,我单击下一步后,也会加载相同的表单。POST网址的所有字段均保持不变。所以我想直接发送POST请求,因为我已经知道了所需的所有细节。这是我的代码,基于:
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
Run Code Online (Sandbox Code Playgroud)
我得到一个错误:
urllib2.URLError: <urlopen error [Errno 61] Connection refused>
Run Code Online (Sandbox Code Playgroud)
我尝试了同样的要求。但是我遇到了与上面相同的错误。这是代码:
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)
Run Code Online (Sandbox Code Playgroud)
因此,我在这里和那里戳了戳,在网上阅读了很少的其他代码,并且我认为它不起作用是因为阻止了CSRF。所以我用斜纹布去了同一页,做了展示,看到了令牌有一些价值:
这是我想要的:
小智 6
我已经成功使用了下面的代码:
params = {u'user_login': self.USER, u'password':self.PASSWORD}
data = urllib.urlencode(params)
request = mechanize.Request( loginURL )
response = mechanize.urlopen(request, data=data)
Run Code Online (Sandbox Code Playgroud)
为了处理 CSRF 令牌问题,我在控制器中添加了以下行:
skip_before_filter :verify_authenticity_token, :only => [:create]
Run Code Online (Sandbox Code Playgroud)
为了保持请求之间的会话,我使用了 cookiesJar。但是您可以从您的请求中检索 CSRF 令牌并将其保存在您的应用程序中,并将其添加到每个新请求中。
| 归档时间: |
|
| 查看次数: |
14140 次 |
| 最近记录: |