【requests深入】发送post请求、使用代理以及cookie和session简介

POST请求常用于登录注册、传输大数据,因其安全性优于GET。爬虫使用代理IP可避免被识别和屏蔽,同时介绍了如何检查和使用代理。文章还对比了cookie和session,强调session在会话保持中的作用,并展示了如何在Python中使用requests库进行相关操作。

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

发送POST请求

哪些地方我们会遇到POST请求:

  1. 登录注册(post比get安全)
  2. 需要传输大文本的时候(POST请求对数据长度没有要求)
    爬虫也需要在这两个地⽅模拟浏览器发送post请求。
import requests
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'}
data = {
	'from':'en',
	'to':'zh',
	'query':'hello',
	'transtype': realtime',
	'simple_means_flag': 3',
	'sign': '679849.965784',
}
post_url = 'https://xxx.com'
r = requests.post(post_url,data=post_data,headers=headers)
print(r.txex) 

使用代理

问题:为什么爬⾍需要使⽤代理

  1. 让服务器以为不是同⼀个客户端在请求
  2. 防⽌我们的真实地址被泄露,防⽌被追究
    使用代理
    proxies = {
    ‘http’:‘http://12.34.56.79:9527’,
    ‘https’:‘http://12.34.56.79:9527’
    }
    用法:
requests.get('http://www.baidu.com',proxies = proxies)

案例:

import requests
proxies = {'http':'http://117.191.11.112'}
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'}
r = requests.get('http://www.baidu.com',proxies = proxies,headers = headers}
print(r.status_code)

怎样使用代理IP
准备⼀堆的IP地址,组成IP池,随机选择⼀个IP来⽤
检查IP的可⽤性
1.可以使⽤requests检查
2.在线代理IP质量检查的⽹站

cookie和session区别

  1. cookie数据存放在客户端的浏览器上,session数据放在服务器上。
  2. cookie不是很安全,别⼈可以分析存放在本地的cookie并进⾏cookie欺骗。
  3. session会在⼀定时间内保存在服务器上。当访问增多,会⽐较占⽤你服务器的性能。
  4. 单个cookie保存的数据不能超过4K,很多浏览器都限制⼀个站点最多保存20个cookie。

爬虫处理cookie和session

带上cookie、session的好处:能够请求到登录之后的页面。
带上cookie、session的弊端:⼀套cookie和session往往和⼀个⽤户对应请求太多,请求次数太多,容易被服务器识别为爬⾍。
不需要cookie的时候尽量不去使⽤cookie
但是为了获取登录之后的⻚⾯,我们必须发送带有cookies的请求
requests提供了⼀个叫做session类,来实现客户端和服务端的会话保持。

使用方法

  1. 实例化session
  2. 先使⽤session发送请求,登录对应⽹站,把cookie保持在session中
  3. 在使⽤session请求登录之后才能访问的⽹站,session能够⾃动携带登录成功时保存在其中的cookie,进⾏请求。
import requests
session = requests.session()
post_url = "******.com"
post_data = {'email':'----@qq.com','password':''} 
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'}
# 使⽤session发送post请求,cookie保存在其中 
session.post(post_url,data=post_data,headers=headers)
# 使⽤session进程请求登录之后才能访问的地址
response = session.get('.......', headers=header)
with open('renren.html', 'w', encoding='utf-8') as f:
    f.write(response.text)
当你想要使用 `requests` 库进行基于 session cookie 的网站模拟登录时,主要步骤包括获取初始页面、解析 cookies(如果需要)、设置 session发送登录请求并处理返回的响应。以下是一个基本的示例: ```python import requests from bs4 import BeautifulSoup # 初始化一个 session s = requests.Session() # 第一步:获取初始网页,通常包含 login_url csrf_token 或者其他必要的凭证信息 login_url = 'http://example.com/login' response = s.get(login_url) # 解析 HTML 获取 CSRF token 或其他隐藏字段(如果有) soup = BeautifulSoup(response.text, 'html.parser') csrf_field = soup.find('input', {'name': 'csrf_token'}) if csrf_field: csrf_token = csrf_field['value'] else: print("Could not find CSRF token in the initial response") # 设置登录数据,包括用户名、密码可能的 CSRF token payload = { 'username': 'your_username', 'password': 'your_password', 'csrf_token': csrf_token, } # 第二步:发送登录 POST 请求 login_response = s.post(login_url, data=payload, headers={'Referer': login_url}) # 检查登录是否成功 if login_response.status_code == 200 and "Welcome" in login_response.text: print("Login successful!") # 登录后,你可以用这个 session发送后续请求cookies 将自动携带 # 如需获取新的 cookies 可以调用 .cookies 属性 new_cookies = login_response.cookies else: print("Failed to log in, please check your credentials or network.") # 示例中的相关问题: 1. Session cookies 在模拟登录中的作用是什么? 2. 如果网站有验证码,如何处理? 3. 如何保存恢复登录后的状态? 4. 使用 sessions 避免重复认证的问题是如何体现的?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值