首页 > 编程语言 >Python-request库的详细解析

Python-request库的详细解析

时间:2024-07-19 19:25:19浏览次数:19  
标签:请求 示例 Python request print import requests 解析 response

引言

在现代网络应用中,与服务器进行通信是一个非常基础且重要的功能。Python的requests库是一个非常强大且易于使用的HTTP库,它允许我们发送HTTP请求,与Web服务进行交互。本文将详细介绍requests库的使用,包括其基本概念、常用功能以及一些高级用法。

安装requests库

在使用requests库之前,我们需要先安装它。可以通过pip命令来安装:

pip install requests

基本概念

HTTP请求方法

HTTP协议定义了几种请求方法,最常见的有:

  • GET:从服务器获取资源。
  • POST:向服务器提交数据,通常用于创建新资源。
  • PUT:更新服务器上的资源。
  • DELETE:删除服务器上的资源。
请求URL

URL(Uniform Resource Locator)是用于定位资源的字符串。例如:https://api.example.com/data

请求头

请求头(Headers)包含了关于请求的元数据,例如内容类型、用户代理等。

请求体

请求体(Body)通常用于POST和PUT请求,包含要发送的数据。

基本用法

发送GET请求

发送GET请求是最简单的操作之一。以下是一个示例:

import requests

response = requests.get('https://api.github.com')
print(response.status_code)  # 打印状态码
print(response.text)         # 打印响应内容
发送POST请求

发送POST请求时,通常需要传递一些数据。以下是一个示例:

import requests

url = 'https://httpbin.org/post'
data = {'key': 'value'}
response = requests.post(url, data=data)
print(response.status_code)  # 打印状态码
print(response.json())       # 打印JSON格式的响应内容
传递请求头

有时我们需要在请求中添加自定义的请求头。以下是一个示例:

import requests

url = 'https://api.github.com'
headers = {'User-Agent': 'my-app/0.0.1'}
response = requests.get(url, headers=headers)
print(response.status_code)  # 打印状态码
print(response.text)         # 打印响应内容

处理响应

状态码

响应的状态码表示请求的结果。常见的状态码有:

  • 200:请求成功。
  • 404:资源未找到。
  • 500:服务器内部错误。
响应内容

响应内容可以是文本、JSON、二进制数据等。以下是一些示例:

import requests

response = requests.get('https://api.github.com')

# 获取文本内容
print(response.text)

# 获取JSON内容
print(response.json())

# 获取二进制内容
print(response.content)
响应头

响应头包含了关于响应的元数据。以下是一个示例:

import requests

response = requests.get('https://api.github.com')
print(response.headers)

高级用法详解

在掌握了requests库的基本用法之后,我们可以进一步探索其高级功能。这些高级功能可以帮助我们更灵活、更高效地处理复杂的HTTP请求场景。以下是对高级用法的详细说明。

1. 会话对象(Session Objects)

会话对象允许我们在多个请求之间保持某些参数,例如cookies、headers等。使用会话对象可以简化代码,提高效率。

示例:
import requests

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

# 更新会话的默认headers
session.headers.update({'User-Agent': 'my-app/0.0.1'})

# 发送第一个请求,设置一个cookie
response1 = session.get('https://httpbin.org/cookies/set/sessioncookie/123456789')
print(response1.text)

# 发送第二个请求,获取之前设置的cookie
response2 = session.get('https://httpbin.org/cookies')
print(response2.text)

在这个示例中,我们创建了一个会话对象,并在多个请求之间共享了headers和cookies。这样可以确保在多个请求之间保持一致的状态。

2. 处理重定向(Handling Redirects)

默认情况下,requests库会自动处理重定向。我们可以通过allow_redirects参数来控制是否允许重定向。

示例:
import requests

# 禁止重定向
response = requests.get('http://github.com', allow_redirects=False)
print(response.status_code)  # 打印状态码
print(response.headers['Location'])  # 打印重定向的URL

在这个示例中,我们发送了一个GET请求到http://github.com,并禁止了重定向。响应的状态码为301,表示请求被永久重定向,响应头中的Location字段包含了重定向的目标URL。

3. 超时设置(Timeout Settings)

在发送请求时,我们可以设置超时时间,以避免长时间的等待。超时时间可以应用于连接阶段和读取阶段。

示例:
import requests
from requests.exceptions import Timeout

try:
    # 设置连接超时和读取超时
    response = requests.get('https://httpbin.org/delay/10', timeout=(3, 5))
except Timeout:
    print('The request timed out')

在这个示例中,我们设置了一个3秒的连接超时和5秒的读取超时。如果请求在3秒内未能建立连接或在5秒内未能读取到响应数据,就会抛出Timeout异常。

4. 代理支持(Proxy Support)

requests库支持通过代理发送请求。我们可以为不同的协议(HTTP、HTTPS)设置不同的代理。

示例:
import requests

# 设置代理
proxies = {
    'http': 'http://10.10.1.10:3128',
    'https': 'http://10.10.1.10:1080',
}

response = requests.get('https://httpbin.org/ip', proxies=proxies)
print(response.text)

在这个示例中,我们为HTTP和HTTPS请求分别设置了代理。通过代理发送请求可以隐藏客户端的真实IP地址,或者绕过某些网络限制。

5. 文件上传(File Uploads)

requests库支持上传文件。我们可以通过files参数来上传文件。

示例:
import requests

# 准备文件
files = {'file': open('report.xls', 'rb')}

# 上传文件
response = requests.post('https://httpbin.org/post', files=files)
print(response.text)

在这个示例中,我们上传了一个名为report.xls的文件。服务器会返回上传文件的相关信息。

6. 流式请求(Streaming Requests)

对于大文件或需要实时处理的响应,我们可以使用流式请求。这样可以避免一次性加载大量数据到内存中。

示例:
import requests

# 流式请求
response = requests.get('https://httpbin.org/stream/20', stream=True)

# 逐行读取响应内容
for line in response.iter_lines():
    if line:
        print(line)

在这个示例中,我们发送了一个流式请求,并逐行读取响应内容。这样可以有效地处理大文件或实时数据流。

7. 自定义身份验证(Custom Authentication)

requests库支持自定义身份验证。我们可以通过继承requests.auth.AuthBase类来实现自定义的身份验证逻辑。

示例:
import requests
from requests.auth import AuthBase

# 自定义身份验证类
class TokenAuth(AuthBase):
    def __init__(self, token):
        self.token = token

    def __call__(self, r):
        r.headers['Authorization'] = f'Bearer {self.token}'
        return r

# 使用自定义身份验证发送请求
response = requests.get('https://httpbin.org/get', auth=TokenAuth('my-token'))
print(response.text)

在这个示例中,我们定义了一个名为TokenAuth的自定义身份验证类,并在发送请求时使用了这个类。这样可以灵活地实现各种身份验证逻辑。

8. 处理Cookies

requests库提供了方便的方法来处理Cookies。我们可以获取、设置和删除Cookies。

示例:
import requests

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

# 设置一个cookie
session.get('https://httpbin.org/cookies/set/sessioncookie/123456789')

# 获取所有cookies
cookies = session.cookies
print(cookies)

# 删除一个cookie
cookies.clear_expired_cookies()
print(cookies)

在这个示例中,我们通过会话对象设置了一个cookie,并获取和删除了cookies。这样可以方便地管理会话状态。

9. 处理SSL证书验证

requests库默认会验证SSL证书。我们可以通过verify参数来控制是否验证SSL证书。

示例:
import requests

# 禁用SSL证书验证
response = requests.get('https://httpbin.org', verify=False)
print(response.text)

在这个示例中,我们禁用了SSL证书验证。这样可以方便地测试不安全的HTTPS站点,但需要注意安全风险。

10. 自定义适配器(Custom Adapters)

requests库允许我们自定义适配器,以实现更复杂的请求逻辑。我们可以通过继承requests.adapters.HTTPAdapter类来实现自定义的适配器。

示例:
import requests
from requests.adapters import HTTPAdapter

# 自定义适配器
class MyAdapter(HTTPAdapter):
    def send(self, request, **kwargs):
        print(f'Sending request to {request.url}')
        return super().send(request, **kwargs)

# 创建一个会话对象,并使用自定义适配器
session = requests.Session()
session.mount('https://', MyAdapter())

# 发送请求
response = session.get('https://httpbin.org/get')
print(response.text)

在这个示例中,我们定义了一个名为MyAdapter的自定义适配器,并在会话对象中使用了这个适配器。这样可以方便地实现自定义的请求逻辑。

标签:请求,示例,Python,request,print,import,requests,解析,response
From: https://blog.csdn.net/xycxycooo/article/details/140463795

相关文章

  • python实现爆破wifi密码
    importpywifiimporttimefrompywifiimportconst#WiFi扫描模块defwifi_scan():#初始化wifiwifi=pywifi.PyWiFi()#使用第一个无线网卡interface=wifi.interfaces()[0]#开始扫描interface.scan()foriinrange(4):t......
  • 编织文字之美:WebKit的CSS文本格式化能力全解析
    编织文字之美:WebKit的CSS文本格式化能力全解析在网页设计中,文本不仅是传递信息的媒介,更是展现美学的重要元素。WebKit,作为Safari、QQ浏览器等众多浏览器的内核,提供了强大的CSS文本格式化支持。通过CSS,开发者可以对文本进行丰富的样式设计,从而提升用户体验和网站的视觉吸引......
  • python+flask计算机毕业设计企业固定资产档案管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着企业规模的不断扩大和业务的日益复杂化,固定资产作为企业重要的经济资源,其管理效率直接影响到企业的运营成本和资产利用率。传统的手工......
  • python+flask计算机毕业设计汽车零件维修管理信息平台(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着汽车工业的飞速发展,汽车保有量持续增长,汽车零部件维修与管理成为汽车行业不可忽视的重要环节。传统的手工记录与管理模式已难以满足现......
  • python爬虫实现简单的代理ip池
    python爬虫实现简单的代理ip池我们在普通的爬虫过程中经常遇到一些网站对ip进行封锁的下面演示一下普通的爬虫程序使用requests.get爬取数据这段代码是爬取豆瓣排行榜的数据,使用f12来查看请求的url和数据格式代码defrequestData():#爬取数据的urlurl:s......
  • 域名解析中断
    域名解析中断在当今数字化的时代,网络已经成为我们生活和工作中不可或缺的一部分。然而,当域名解析中断时,整个网络世界仿佛瞬间陷入了混乱,给个人和企业带来诸多不便和损失。域名解析,简单来说,就是将我们在浏览器中输入的易于理解的域名,如 www.dns.com,转换为计算机能够理解的IP地......
  • JSON解析平铺获取数据
    datax工程源码提供Configuration提供多级JSON配置信息无损存储importcom.alibaba.fastjson2.JSON;importcom.alibaba.fastjson2.JSONWriter;importcom.zditec.system.utils.exception.CommonErrorCode;importcom.zditec.system.utils.exception.DataXException;import......
  • Java中的多线程编程与锁机制解析
    Java中的多线程编程与锁机制解析大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将深入探讨Java中的多线程编程与锁机制。多线程编程在现代应用开发中至关重要,它允许程序同时执行多个任务,从而提高程序的响应性和性能。我们将通过代码示例来解析Jav......
  • 基于Python星载气溶胶数据处理与反演分析
    在当前全球气候变化和环境污染问题日益突出的背景下,气溶胶研究显得尤为重要。气溶胶在大气中由直径范围在0.01微米至10微米固体和液体颗粒构成,直接或间接影响地球辐射平衡、气候变化和空气质量。尤其在“碳中和”目标的驱动下,研究气溶胶对“碳中和”的气候影响及其环境效应,不仅......
  • [附开题]flask框架的基于web的线上考试管理系统的设计与实现n1qn5(python+源码)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,教育领域正经历着深刻的变革。传统的线下考试模式逐渐显露出其局限性,如组织成本高、效率低下、资源分配不均等问......