python - 我无法使用发布请求 python 登录网站
问题描述
我正在尝试通过传递用户名和密码登录网站。它说会话 cookie 丢失。我是 api 的初学者。我不知道我是否在这里遗漏了一些东西。网站是http://testing-ground.scraping。亲/登录
import urllib3
http = urllib3.PoolManager()
url = 'http://testing-ground.scraping.pro/login?mode=login'
req = http.request('POST', url, fields={'usr':'admin','pwd':'12345'})
print(req.data.decode('utf-8'))
解决方案
您的代码中有两个问题导致您无法成功登录。
内容类型问题
在您urllib3
用于发送 content-type 数据的代码中multipart/form-data
。但是,该网站似乎只接受 content-type application/x-www-form-urlencoded
。
尝试以下 cURL 命令:
curl -v -d "usr=admin&pwd=12345" http://testing-ground.scraping.pro/login?mode=login
curl -v -F "usr=admin&pwd=12345" http://testing-ground.scraping.pro/login?mode=login
对于第一个,您的请求标头中的内容类型是application/x-www-form-urlencoded
,因此网站会使用它并让您登录(并带有302 Found
响应)。
但是,第二个发送带有 content-type 的数据multipart/form-data
。该网站不接受它,因此拒绝您的登录请求(带有200 OK
响应)。
饼干问题
另一个问题是urllib3
默认情况下遵循重定向。更重要的是,cookie 默认不被urllib3
. 因此,第二个请求不会包含 cookie tdsess=TEST_DRIVE_SESSION
,因此网站会返回您未登录的消息。
如果只关心登录请求,可以试试下面的代码:
import urllib3
http = urllib3.PoolManager()
url = 'http://testing-ground.scraping.pro/login?mode=login'
req = http.request('POST', url, data={'usr':'admin','pwd':'12345'}, encode_multipart=False, redirect=False)
print(req.data.decode('utf-8'))
encode_multipart=False
指示以urllib3
content-type 发送数据application/x-www-form-urlencoded
;告诉它不要遵循redirect=False
重定向,以便您可以看到初始请求的响应。
但是,如果您确实想完成整个登录过程,则需要保存第一个响应中的 cookie 并在第二个请求中发送它。您可以使用urllib3
, 或
使用请求库
我不确定您是否有任何特殊原因使用urllib3
. Urllib3
如果你很好地实现它肯定会起作用,但我建议尝试Request
使用更容易使用的库。对于您的情况,以下代码Request
将起作用并让您进入欢迎页面:
import requests
url = 'http://testing-ground.scraping.pro/login?mode=login'
req = requests.post(url, data={'usr':'admin','pwd':'12345'})
print(req.text)
推荐阅读
- c# - C# TcpClient - 客户端确定远程服务器是否正常关闭连接的最佳方法是什么?
- mybatis - 在mybatis框架中解析带有package作为子标签的typeAliases标签时,会出现解析错误。我使用jdk9作为开发环境
- python - 如何将数据框列中的多个句子组合成 Python 中的单个元素列表
- xamarin - 为什么我的 Xamarin 表单自定义编辑器渲染器不执行任何操作
- pine-script - 较低的时间范围
- sql - FROM 子句中的@table
- c++ - 高兴导致 glfwSwapBuffers 返回错误消息
- wordpress - appengine 上的连接 FTP wordpress 问题
- reactjs - 如何在 React 中制作一个显示增量值的输入滑块?
- python - Python Gurobi:在优化停止之前输出 MIPGap、运行时和求解细节