正常get或post提交账号密码

本文介绍如何使用Fiddler进行抓包并分析登录请求,包括配置浏览器代理、清除抓包记录及利用过滤功能定位登录请求。文中还提供了Python代码示例,展示如何通过requests库模拟登录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

登陆前打开fiddler,进行抓包,当然你需要先配置浏览器代理。

在点击登录前可以使用快捷键Ctrl+x清空fiddler抓取记录,这样可以更好的找到登陆的请求。同样你也可以使用fiddler的过滤功能,如下图:


至于如何确定那个是登陆的请求,一般使用Ctrl+f查找某些关键字,如用户名、密码

下图为一般登陆请求,使用post请求,用户名和密码为明文提交


如下图为登陆的请求头和响应头信息,可见响应头中有set-cookie,但不一定登陆成功需要看响应内容才能确定时候登陆成功。


然后可以写代码了

self.session = self.gen_session()
self.session.headers.update({
    "User-Agent": "Dalvik/2.1.0 (Linux; U; Android 5.0.2; CHE-TL00H Build/HonorCHE-TL00H)",
    "Connection": "Keep-Alive",
    "Accept-Encoding": "gzip",
    "Content-Type": "application/x-www-form-urlencoded",
})
params = {
    "userName": self.user_name,
    "pwd": self.pass_word,
    "userType": "0",
}
r = self.session.post(self.login_url, params=params)
使用的是requests.session

理解登陆过程推荐看一下《图解HTTP》,顺便理解一下请求头和响应头中各个参数的作用,虽然我还没看完

<think>好的,用户现在希望改进之前的代码,解决405错误的同时,在访问网站时使用GET请求,而在提交账号密码使用POST传参,并整合代码。首先,我需要回顾之前的对话,确保理解用户的问题和之前提供的解决方案。 用户之前遇到了405错误,通常是因为请求方法不正确。比如,可能错误地使用POST访问了只支持GET的URL。现在用户希望明确区分GETPOST使用场景:访问网站用GET提交账号密码POST。这可能涉及到登录流程的不同步骤。 接下来,我需要考虑如何整合代码。用户可能希望有一个更简洁、结构化的脚本,正确使用会话(session)来保持cookies,同时正确处理GETPOST请求。可能需要使用requests库的Session对象来维持会话状态,这样在登录后可以保持cookies,后续的请求都能携带认证信息。 然后,要确保在登录时使用POST方法发送账号密码,而其他页面访问使用GET。需要检查目标网站的登录表单是如何处理数据的,比如是否有CSRF令牌其他隐藏字段,这些可能需要从GET请求的登录页面中提取,然后在POST请求中提交。 用户可能还需要处理请求头,确保Content-Type正确,比如application/x-www-form-urlencodedapplication/json,这取决于目标网站的要求。此外,可能需要设置User-Agent来模拟浏览器,避免被拒绝访问。 还需要考虑错误处理,比如检查响应状态码,处理可能的重定向,以及登录失败的情况。可能需要添加异常处理和日志输出,方便调试。 另外,用户提到的整合代码可能是指将登录和后续的数据请求整合到一个脚本中,确保流程正确,避免重复代码。可能需要将配置参数如URL、账号密码提取到变量中,提高代码的可维护性。 最后,需要测试代码,确保登录成功,后续的GET请求能够正确获取数据,不再出现405错误。可能需要使用开发者工具分析网络请求,对比代码中的请求与实际浏览器的请求是否一致,找出差异并进行调整。</think>以下是一个 **整合GET/POST请求、处理登录流程** 的优化代码示例,通过 `requests.Session` 保持会话状态并正确分离请求方法: --- ### **代码改进思路** 1. **明确请求方法分工** - **访问网站首页/登录页** → `GET` - **提交账号密码** → `POST` 2. **使用会话保持Cookies** - 通过 `requests.Session()` 自动管理Cookies,确保登录状态延续 3. **参数传递规范化** - GET参数用 `params` - POST参数用 `data` `json` 4. **防御性编程** - 增加状态码检查、异常处理 --- ### **完整代码示例** ```python import requests from bs4 import BeautifulSoup # 配置参数 BASE_URL = "https://example.com" LOGIN_URL = f"{BASE_URL}/login" DATA_URL = f"{BASE_URL}/data" USERNAME = "your_username" PASSWORD = "your_password" def main(): # 创建会话保持Cookies with requests.Session() as session: # ========== 第一步:GET请求访问登录页 ========== try: # 获取登录页(通常包含CSRF令牌) login_page = session.get(LOGIN_URL) login_page.raise_for_status() # 检查HTTP状态码 except requests.RequestException as e: print(f"访问登录页失败: {e}") return # 提取CSRF令牌(根据实际页面结构调整选择器) soup = BeautifulSoup(login_page.text, 'html.parser') csrf_token = soup.find('input', {'name': 'csrf_token'}).get('value', '') # ========== 第二步:POST请求提交登录表单 ========== login_payload = { 'username': USERNAME, 'password': PASSWORD, 'csrf_token': csrf_token # 关键安全参数 } try: # 明确使用POST方法提交表单 login_response = session.post( LOGIN_URL, data=login_payload, # 表单格式提交 headers={ 'Referer': LOGIN_URL, # 通常需要Referer防爬 'Content-Type': 'application/x-www-form-urlencoded' }, allow_redirects=True # 允许跟随重定向 ) login_response.raise_for_status() # 验证登录是否成功(根据实际响应调整) if "欢迎" not in login_response.text: print("登录失败:账号密码错误验证失败") return except requests.RequestException as e: print(f"登录请求失败: {e}") return # ========== 第三步:GET请求获取数据 ========== try: # 构造GET请求参数(根据API文档调整) params = { 'page': 1, 'size': 50, 'timestamp': 1620000000 } # 发送GET请求获取数据 data_response = session.get( DATA_URL, params=params, # GET参数通过URL传递 headers={'Accept': 'application/json'} # 根据接口要求设置 ) data_response.raise_for_status() # 处理数据(示例:解析JSON) result = data_response.json() print("成功获取数据:", result) except requests.RequestException as e: print(f"获取数据失败: {e}") if __name__ == "__main__": main() ``` --- ### **关键优化点说明** | 优化项 | 作用 | |----------------------|--------------------------------------------------------------------| | 使用 `Session()` | 自动管理Cookies,保持登录状态 | | 分离GET/POST方法 | 符合RESTful规范,避免405错误 | | 动态获取CSRF令牌 | 应对网站反爬机制,保证表单提交合法性 | | 添加请求头 `Referer` | 模拟浏览器行为,防止被识别为爬虫 | | 参数传递规范化 | GET用`params`,POST表单用`data`,JSON用`json` | | 异常处理链 | 精准定位问题环节,增强代码健壮性 | --- ### **调试建议** 1. **打印关键信息** ```python # 在关键步骤后添加调试输出 print("[DEBUG] 登录页状态码:", login_page.status_code) print("[DEBUG] 当前Cookies:", session.cookies.get_dict()) print("[DEBUG] 数据请求URL:", data_response.url) # 查看实际发送的带参数URL ``` 2. **使用开发者工具对比** - 在浏览器中手动操作,观察 **Headers** 和 **Payload** 与代码是否一致 --- 通过以上改进,代码将严格遵循HTTP方法规范,同时具备更好的可维护性和反爬应对能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值