Python中如何构造登录请求?各位帮忙看下拉。
浏览器请求登录如下
POST http://127.0.0.1/userLogin.asp HTTP/1.1
Host: 127.0.0.1
Connection: Keep-Alive
Content-Length: 79
Pragma: no-cache
Cache-Control: no-cache
Accept: image/jpeg, image/gif, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, /
Accept-Language: zh-CN
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0)
Referer: http://127.0.0.1/userLogin.asp
Accept-Encoding: gzip, deflate
save2Cookie=&vldcode=&account=admin&password=fgs@mm&btnSubmit=+%B5%C7%C2%BC+
我 py 写成这样
login_url = “http://127.0.0.1/userLogin.asp"
admin_url = “http://127.0.0.1/menu_admin.asp"
headers1 = {
“Accept-Encoding”:“gzip, deflate”,
“Host”:“127.0.0.1”,
“Referer”:“http://10.41.10.254/menu_admin.asp”,
“Upgrade-Insecure-Requests”:“1”,
“User-Agent”:“Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36”,
“Content-Type”: “application/x-www-form-urlencoded”,
}
data1 = {
“save2Cookie”:””,“vldcode”:"",“account”:“admin”,“password”:“fgs@mm”,“btnSubmit”:“登录”
}
data_gb2312 = urlencode(data1, encoding=‘gb2312’)
sesion = requests.session()
sesion.post(url=login_url,headers=headers1,data=data_gb2312)
aa=sesion.get(admin_url)
print(aa.content.decode(“gb2312”))
我用 fd 看到我请求是这样的
POST http://127.0.0.1/userLogin.asp HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36
Accept-Encoding: gzip, deflate
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8
Connection: keep-alive
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: no-cache
Host: 127.0.0.1
Pragma: no-cache
Connection: keep-alive
Referer: http://127.0.0.1/home.asp
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 79
save2Cookie=&vldcode=&account=admin&password=fgs%40mm&btnSubmit=%B5%C7%C2%BC
是我的构造有问题吗?还是接口不对,我发现%B5%C7%C2%BC 正常请求 是有个+ 号的,各位帮忙看看,一个路由登录
Python中如何构造登录请求?各位帮忙看下拉。
直接 encode 登录 就行了, +是因为空格被转换的
>>> from urllib.parse import urlencode
>>> urlencode({‘a’: 324, “vv”: ’ dgdg '})
'a=324&vv=+dgdg+'
还要注意 password 的 @也被转换了, 像这种情况,直接把 btnSubmit 写成转换后的,就不用 urlencode 了
在Python里构造登录请求,最直接的方式就是用requests库。核心就是模拟浏览器发送一个POST请求,把用户名和密码这些认证信息提交给服务器的登录接口。
下面是一个最基础的示例,假设登录页面是 http://example.com/login, 它需要接收表单字段 username 和 password:
import requests
# 登录的URL
login_url = 'http://example.com/login'
# 你的账号信息
payload = {
'username': 'your_username',
'password': 'your_password'
}
# 发送POST请求
try:
response = requests.post(login_url, data=payload)
# 检查请求是否成功 (状态码200通常表示成功)
if response.status_code == 200:
print("登录请求发送成功!")
# 打印服务器返回的内容,可能包含token、重定向信息或错误提示
print("响应内容:", response.text)
else:
print(f"请求失败,状态码: {response.status_code}")
print("响应内容:", response.text)
except requests.exceptions.RequestException as e:
print(f"网络请求出错: {e}")
几个关键点:
- 找对接口和参数:用浏览器的开发者工具(F12),在Network标签页里找到登录时实际发送请求的URL和表单字段名,它们不一定是
username和password。 - 处理会话:如果登录后需要保持状态(比如访问其他需要登录的页面),你需要使用
requests.Session()。session = requests.Session() session.post(login_url, data=payload) # 之后用session去访问其他页面,会自动携带登录后的cookies resp = session.get('http://example.com/dashboard') - 应对复杂情况:有些网站有CSRF token、动态参数或者需要验证码,那就需要先从登录页面GET请求里提取这些值,再拼接到POST数据里一起提交。
总结:先用基础POST请求,复杂情况再加Session和参数处理。
小白想在这里问一下
为什么我的登录编码出来是这个呀?
>>>from urllib.parse import quote,unquote
>>>print(quote(‘登录’))
%E7%99%BB%E5%BD%95
btnLogon=%B5%C7%C2%BC
我想构造这个,但是我对它解码是乱码。。。。
已经解决了

