Python: 尝试使用requests进行POST请求提交表单
Python: 尝试使用requests进行POST请求提交表单
我正在尝试使用Python和requests库登录一个网站进行爬虫,我尝试了以下代码(但不起作用):
import requests headers = {'User-Agent': 'Mozilla/5.0'} payload = {'username':'niceusername','password':'123456'} r = requests.post('https://admin.example.com/login.php',headers=headers,data=payload)
但是没有任何效果,只是重定向到登录页面。我需要打开一个会话吗?我是否发送了错误的POST请求?我需要加载cookies吗?或者会话会自动处理这个?
我迷失了,需要一些帮助和解释。
我尝试登录的网站是php的,我需要"捕获set-cookie并设置cookie头"吗?如果是这样,我不知道该怎么做。
该网页是一个表单,具有以下内容(如果这有助于):
input :'username' 'password'
'id':'myform', 'action':"login.php"
一些额外的信息,也许你可以看出我漏掉了什么..
r.headers Out[13]: CaseInsensitiveDict({ 'content-encoding': 'gzip', 'transfer-encoding': 'chunked', 'set-cookie': 'PHPSESSID=v233mnt4malhed55lrpc5bp8o1; path=/', 'expires': 'Thu, 19 Nov 1981 08:52:00 GMT', 'vary': 'Accept-Encoding', 'server': 'nginx', 'connection': 'keep-alive', 'pragma': 'no-cache', 'cache-control': 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0', 'date': 'Tue, 24 Dec 2013 10:50:44 GMT', 'content-type': 'text/html' }) r.cookies Out[14]: <[ Cookie(version=0, name='PHPSESSID', value='v233mnt4malhed55lrpc5bp8o1', port=None, port_specified=False, domain='admin.example.com', domain_specified=False, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={}, rfc2109=False) ]>
非常感谢帮助!感谢atupal提供的答案更新:
import requests headers = {'User-Agent': 'Mozilla/5.0'} payload = {'username':'usr','pass':'123'} link = 'https://admin.example.com/login.php' session = requests.Session() resp = session.get(link,headers=headers) # 首先通过此方法获取页面上的cookies,并用下一行代码存储它们: cookies = requests.utils.cookiejar_from_dict(requests.utils.dict_from_cookiejar(session.cookies)) resp = session.post(link,headers=headers,data=payload,cookies =cookies) # 使用firebug检查POST数据,密码实际上是'pass',位于'net'的param下。从这一步继续前进的方法是: session.get(link)