Request.post returns 没有
Request.post returns nothing
我有一个非常简单的脚本,它应该执行到网页的登录过程:
import requests
from bs4 import BeautifulSoup
headers = {'User-Agent': 'Mozilla/5.0'}
credentials = {'user': 'user',
'pass': 'pass'}
session = requests.Session()
req = session.get('https://myurl.com', verify=False)
html = BeautifulSoup(req.text)
login_form = html.find('form', {'name': 'loginForm'})
login_url = login_form['action']
# at this moment login_url has this form: https://myurl.com/webclient;jsessionid=AC7F87C5D38C0B2EABBF6D76379BB75B?pageid=816
req2 = session.post(login_url, data=credentials, headers=headers, verify=False)
print 'req2:', req2.text # prints nothing
为什么req2.text(虽然req2.status_codereturns200)是空的?
当我在 html 源中检查 action 属性时 form 我看到 URL 没有 jsessionid 。为什么?在 request.post 中我应该将凭据发送到哪个地址?
PS。 pageid 是动态生成的,所以这就是我使用 BeautifulSoup 从 html 表单中获取此 url 的原因。
我发现了这个问题,它真的很微不足道 - 在这种情况下提交按钮值是强制性的。
所以我需要做的就是将按钮值添加到 credentials 字典。
尝试对值进行编码:
credentials = {
'user'.encode("utf-8"): 'user'.encode("utf-8"),
'pass'.encode("utf-8"): 'pass'.encode("utf-8")
}
相信你会写得更好。我遇到了同样的问题,这就是解决方案。
我有一个非常简单的脚本,它应该执行到网页的登录过程:
import requests
from bs4 import BeautifulSoup
headers = {'User-Agent': 'Mozilla/5.0'}
credentials = {'user': 'user',
'pass': 'pass'}
session = requests.Session()
req = session.get('https://myurl.com', verify=False)
html = BeautifulSoup(req.text)
login_form = html.find('form', {'name': 'loginForm'})
login_url = login_form['action']
# at this moment login_url has this form: https://myurl.com/webclient;jsessionid=AC7F87C5D38C0B2EABBF6D76379BB75B?pageid=816
req2 = session.post(login_url, data=credentials, headers=headers, verify=False)
print 'req2:', req2.text # prints nothing
为什么req2.text(虽然req2.status_codereturns200)是空的? 当我在 html 源中检查 action 属性时 form 我看到 URL 没有 jsessionid 。为什么?在 request.post 中我应该将凭据发送到哪个地址?
PS。 pageid 是动态生成的,所以这就是我使用 BeautifulSoup 从 html 表单中获取此 url 的原因。
我发现了这个问题,它真的很微不足道 - 在这种情况下提交按钮值是强制性的。 所以我需要做的就是将按钮值添加到 credentials 字典。
尝试对值进行编码:
credentials = {
'user'.encode("utf-8"): 'user'.encode("utf-8"),
'pass'.encode("utf-8"): 'pass'.encode("utf-8")
}
相信你会写得更好。我遇到了同样的问题,这就是解决方案。