requests模块

目录

什么是 requests

requests 特点

官方文档

requests 模块安装

requests 的使用

发送无参数的 get 请求

response 响应对象的常用属性和方法

发送带请求头的请求

发送有参数的 get 请求

发送无参数的 post 请求

发送有参数的 post 请求

发送json参数的 post 请求

使用 cookies 保持状态

使用 session 保持状态

设置请求超时时间

verify 参数

proxies 代理

proxies是什么


什么是 requests

requests 是一个用于发送 HTTP 请求的 Python 库,使得与 Web 服务和 API 进行交互变得非常简单。它提供了人性化的 API 接口,封装了复杂的 HTTP 操作,使开发者可以更容易地发送 HTTP/1.1 请求,包括 GET、POST、PUT、DELETE 等方法,并处理响应。

requests 特点

  • 简单易用:提供了简单的函数调用和灵活的接口设计。
  • 自动编码处理:自动处理 URL 编码和字符编码。
  • 持久会话:可以使用会话对象保持会话,自动处理 Cookie。
  • 文件上传:支持多部分编码文件上传。
  • 响应内容自动解码:自动根据响应内容的编码进行解码。
  • 支持 SSL:支持 HTTPS 请求。

官方文档

Requests: 让 HTTP 服务人类 — Requests 2.18.1 文档

requests 模块安装

pip install requests

requests 的使用

发送无参数的 get 请求

示例:

import requests

url = 'https://www.baidu.com'

# 向 url 发送 get 请求
response = requests.get(url)

# 获取响应结果 bytes类型
content = response.content

# 打印相应结果
print(content.decode('utf-8'))


response 响应对象的常用属性和方法
  • requests.status_code:HTTP 响应状态码,例如 200(成功)、404(未找到)。
  • response.headers:响应头的字典。
  • response.encoding:响应内容的编码类型,默认从响应头的 Content-Type 中推断。
  • response.text:解码后的响应内容(字符串类型,根据 response.encoding 编码属性进行响应,大概率是乱码)。
  • response.content:原始的响应内容(二进制数据),使用decode('utf-8'),进行结果,可以得到正确的中文。
  • response.json():将响应内容解析为 JSON 对象(如果内容是 JSON 格式)。
  • response.url:最终请求的 URL(考虑重定向后的 URL)。
  • response.history:重定向的响应列表(如果有)。
  • response.elapsed:请求处理的时间(一个 timedelta 对象)。
  • response.cookies:响应中的 Cookies。
  • response.reason:HTTP 状态码的原因短语(例如 "OK")。
  • response.raise_for_status():如果响应状态码是 4xx 或 5xx,抛出 HTTPError 异常。
  • response.apparent_encoding:响应内容的推断编码。
  • response.raw:原始的底层 urllib3 HTTPResponse 对象。
  • response.iter_content(chunk_size=1024, decode_unicode=False):以块的形式迭代响应内容,适用于大文件下载。
    • for chunk in response.iter_content(chunk_size=1024):
          # 处理块数据

  • response.iter_lines(chunk_size=512, decode_unicode=None, delimiter=None):以行的形式迭代响应内容,适用于逐行读取。
    • for line in response.iter_lines():
          # 处理行数据

  • response.close():关闭响应连接。

示例:

import requests

url = 'https://www.baidu.com'

# 向 url 发送 get 请求
response = requests.get(url)

print(response.status_code)         # 200

print(response.reason)              # OK

print(response.headers)             # {'Cache-Control': 'private, no-cache, no-store, proxy-revalidate, no-transform', 'Connection': 'keep-alive', 'Content-Encoding': 'gzip', 'Content-Type': 'text/html', 'Date': 'Tue, 23 Jul 2024 01:35:34 GMT', 'Last-Modified': 'Mon, 23 Jan 2017 13:24:17 GMT', 'Pragma': 'no-cache', 'Server': 'bfe/1.0.8.18', 'Set-Cookie': 'BDORZ=27315; max-age=86400; domain=.baidu.com; path=/', 'Transfer-Encoding': 'chunked'}

print(response.encoding)            # ISO-8859-1

print(response.apparent_encoding)   # utf-8

print(response.url)                 # https://www.baidu.com/

cookies = response.cookies
print(cookies)                      # <RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>

# 解析 cookies
# 获取所有cookie 的名称
print(cookies.keys())
# 获取所有cookie 的值
print(cookies.values())
# 获取所有cookie 的名称和值
print(cookies.items())
# 获取指定cookie 名称的值
print(cookies.get('cookie_name'))
# 设置 cookie
cookies.set('cookie_name', 'cookie_value')

# 解析 JSON 响应内容
# data = response.json()
# print(data)

发送带请求头的请求
import requests

url = 'https://www.baidu.com'

# 请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 SLBrowser/9.0.3.5211 SLBChan/25',
    'Token': 'xxxxxx'
}

# 向 url 发送请求
response = requests.get(url, headers=headers)
发送有参数的 get 请求

方式一:参数跟在url后面

import requests

# 带参数的 url
url = 'https://www.baidu.com/s?wd=python'

# 请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 SLBrowser/9.0.3.5211 SLBChan/25'
}

# 向 url 发送请求
response = requests.get(url, headers=headers)

# 把响应内容写到文件中
with open('baidu.html', 'wb') as file:
    file.write(response.content)

方式二:参数写在请求体中

import requests

# 不带参数的 url
url = 'https://www.baidu.com/s?'

# 请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 SLBrowser/9.0.3.5211 SLBChan/25'
}

# 请求参数
params = {
    'wd': 'python'
}

# 向 url 发送请求
response = requests.get(url, headers=headers, params=params)

# 把响应内容写到文件中
with open('baidu.html', 'wb') as file:
    file.write(response.content)

发送无参数的 post 请求
import requests

url = 'http://example.com/xxx'

# 向 url 发送请求
response = requests.post(url)

print(response.content.decode('utf-8'))
发送有参数的 post 请求
import requests

url = 'http://example.com/xxx'

# 请求参数
data = {
    'name': 'Tom',
    'age': 18
}

# 向 url 发送请求
response = requests.post(url, data=data)

print(response.content.decode('utf-8'))
发送json参数的 post 请求
import requests
import json

url = 'http://example.com/xxx'

# 请求头
headers = {'content-type': 'application/json'}

# 请求参数
data = {
    'name': 'Tom',
    'age': 18
}

# 向 url 发送请求
response = requests.post(url, headers=headers, data=json.dumps(data))

print(response.json())
使用 cookies 保持状态

示例:以github为例,保持登录状态

import requests

url = 'https://github.com/TheAlgorithms/Python'

# 请求头
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 SLBrowser/9.0.3.5211 SLBChan/25',
    # 方式一:在请求头上带cookie
    # "cookie": "_octo=GH1.1.1465102456.1721701588; preferred_color_mode=light; tz=Asia%2FShanghai; _device_id=b749a4ec556beaa7356ffd13ca2c2361; tz=Asia%2FShanghai; color_mode=%7B%22color_mode%22%3A%22auto%22%2C%22light_theme%22%3A%7B%22name%22%3A%22light%22%2C%22color_mode%22%3A%22light%22%7D%2C%22dark_theme%22%3A%7B%22name%22%3A%22dark%22%2C%22color_mode%22%3A%22dark%22%7D%7D; logged_in=yes; _gh_sess=UeoKdJWTVwEyqPAABtHBvc3pm%2BUnzmEvn7naD4xHLKvEjam3fCXesv%2BQurWmhQ0V4MmPojA2JY%2Fd0Kstyv1f1fo3eyMyDHU2MDctSVNY%2B%2Bb5Zbq5fXx6DBhizpGdxSKgbtMm%2FgylGTg1Lgaq4CJdZ3xx22ZdXXQmBCOPjiHW7qcb4CqcdJQdZYHt1y2yil0OlKqjBEGbFzJzpJCtt2zti2lw%2BnKAAmZNVVH3W2E7qqNWrIhutygpw%2Bnwo%2FbqeUy16a6yekLZE3Mbxb2m4aVxOWfs82t2y4wak3wLZO7fMVQhp1Z3cVOGppTB1Ji1s19i4xc6NDLO5--6028PWpmgkuowBd--uYclGOCEL6BWbsAiVhKArA%3D%3D"
}

# 方式二:使用 get的cookies参数
temp = "_octo=GH1.1.1465102456.1721701588; preferred_color_mode=light; tz=Asia%2FShanghai; _device_id=b749a4ec556beaa7356ffd13ca2c2361; tz=Asia%2FShanghai; color_mode=%7B%22color_mode%22%3A%22auto%22%2C%22light_theme%22%3A%7B%22name%22%3A%22light%22%2C%22color_mode%22%3A%22light%22%7D%2C%22dark_theme%22%3A%7B%22name%22%3A%22dark%22%2C%22color_mode%22%3A%22dark%22%7D%7D; logged_in=yes; _gh_sess=UeoKdJWTVwEyqPAABtHBvc3pm%2BUnzmEvn7naD4xHLKvEjam3fCXesv%2BQurWmhQ0V4MmPojA2JY%2Fd0Kstyv1f1fo3eyMyDHU2MDctSVNY%2B%2Bb5Zbq5fXx6DBhizpGdxSKgbtMm%2FgylGTg1Lgaq4CJdZ3xx22ZdXXQmBCOPjiHW7qcb4CqcdJQdZYHt1y2yil0OlKqjBEGbFzJzpJCtt2zti2lw%2BnKAAmZNVVH3W2E7qqNWrIhutygpw%2Bnwo%2FbqeUy16a6yekLZE3Mbxb2m4aVxOWfs82t2y4wak3wLZO7fMVQhp1Z3cVOGppTB1Ji1s19i4xc6NDLO5--6028PWpmgkuowBd--uYclGOCEL6BWbsAiVhKArA%3D%3D"
cookies = {data.split('=')[0]: data.split('=')[-1] for data in temp.split('; ')}

response = requests.get(url, headers=headers, cookies=cookies)

with open("github.html", "wb") as f:
    f.write(response.content)
使用 session 保持状态
import requests

url1 = 'https://xxx.com/login'
url2 = 'https:///xxx.com/index'

# 创建一个 Session 对象
session = requests.Session()

# 配置默认的 headers
session.headers.update({'User-Agent': 'Mozilla/5.0 ('})

# 配置请求超时时间,单位秒
session.timeout = 5

# 配置代理ip
proxies = {
    'http': 'http://11.11.110.xxx:8080'
}

# 使用代理的
session.proxies.update(proxies)

# 发送一个请求
response = session.post(url1, data={'username': 'Tom', 'password': '123456'})
print(response.json())

# 发送另一个请求,自动使用相同的 headers 和持久的连接
response = session.get(url2)
print(response.json())

# 关闭
session.close()
response.close()
设置请求超时时间
import requests

url = 'https://www.baidu.com'

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 SLBrowser/9.0.3.5211 SLBChan/25',
}

# timeout:请求响应超时时间,单位秒
response = requests.get(url, timeout=10, headers=headers)
verify 参数

verify 参数用于控制是否验证服务器的 SSL/TLS 证书。当 verify 设置为 True 或未设置时,requests 库会验证服务器的 SSL/TLS 证书,确保其是由受信任的证书颁发机构(CA)签发的。requests 使用内置的受信任 CA 列表来进行验证。

例如verify=False时,就不会给我们类似下图的页面,会让我们直接访问原网站。

示例:

import requests

url = 'https://www.baidu.com'

response = requests.get(url, verify=False)

print(response.content.decode('utf-8'))

proxies 代理

proxies是什么

proxies是 requests库中的一个参数,用于配置 HTTP 和 HTTPS 请求通过代理服务器发送。这在需要通过特定服务器进行请求、隐藏真实 IP 地址或访问被防火墙阻挡的资源时非常有用。

proxies代理的使用

示例:

import requests

# url
url = 'https://www.baidu.com'

# 使用代理
proxies = {
    'http': 'http://11.11.110.xxx:8080',
    # 如果这个代理服务器支持https代理的话
    # 'https': 'https://11.11.110.xxx:8080',
    # 如果这个代理服务器支持socks代理的话
    # 'socks5': 'socks5://user:password@socks-proxy.example.com:1080',
}

# 使用代理,请求url地址
# proxies={'http': proxies['http']}  尝试使用http代理
# proxies={'http': proxies['http'], 'https': proxies['https']} 尝试使用https代理
response = requests.get(url, proxies=proxies)

print(response.content.decode('utf-8'))

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

又逢乱世

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值