Python requests库详解:轻松发送HTTP请求的终极指南

包含编程籽料、学习路线图、爬虫代码、安装包等!【点击领取】

前言
在现代网络编程中,HTTP请求是与Web服务交互的基础。Python中的requests库以其简洁优雅的API设计,成为开发者发送HTTP请求的首选工具。本文将全面介绍requests库的使用方法,从基础请求到高级技巧,帮助你掌握网络数据交互的核心技能。

一、requests库简介
requests是一个基于Python开发的HTTP库,比Python标准库中的urllib更加简单易用。它具有以下特点:

人性化的API设计

支持连接保持和连接池

支持文件上传

自动内容解码

国际化域名和URL

自动实现持久连接

安装requests

pip install requests

二、发送基本HTTP请求

  1. GET请求
    GET是最常用的HTTP方法,用于从服务器获取资源。
import requests

# 基本GET请求
response = requests.get('https://www.example.com')

# 打印响应状态码
print(response.status_code)

# 打印响应内容
print(response.text)
  1. 带参数的GET请求
# 通过params参数传递查询字符串
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://httpbin.org/get', params=params)

# 实际请求的URL
print(response.url)  # 输出: https://httpbin.org/get?key1=value1&key2=value2
  1. POST请求
    POST通常用于向服务器提交数据。
# 基本POST请求
data = {'key': 'value'}
response = requests.post('https://httpbin.org/post', data=data)

# 查看服务器返回的数据
print(response.json())

三、请求与响应处理

  1. 响应内容解析
    requests提供了多种方式访问响应内容:
response = requests.get('https://www.example.com')

# 文本内容
print(response.text)

# 二进制内容
print(response.content)

# JSON响应(自动解析)
print(response.json())

# 原始响应(用于流式传输)
print(response.raw)
  1. 响应状态码
response = requests.get('https://www.example.com')

# 状态码
print(response.status_code)

# 状态码是否成功(200-400范围内)
print(response.ok)

# 抛出HTTP错误(如果请求失败)
response.raise_for_status()
  1. 请求头与响应头
# 自定义请求头
headers = {
    'User-Agent': 'Mozilla/5.0',
    'Accept': 'application/json'
}
response = requests.get('https://www.example.com', headers=headers)

# 查看响应头
print(response.headers)

# 获取特定响应头
print(response.headers['Content-Type'])

四、高级请求技巧

  1. 超时设置
# 设置超时时间(秒)
try:
    response = requests.get('https://www.example.com', timeout=3)
except requests.exceptions.Timeout:
    print("请求超时")
  1. 会话对象(Session)
    使用Session可以保持某些参数跨请求,并重用TCP连接,提高性能。
# 创建会话
session = requests.Session()

# 设置公共参数
session.headers.update({'User-Agent': 'MyApp/1.0'})

# 使用会话发送请求
response1 = session.get('https://httpbin.org/cookies/set/sessioncookie/123456789')
response2 = session.get('https://httpbin.org/cookies')

print(response2.json())  # 会显示之前设置的cookie
  1. 代理设置
proxies = {
    'http': 'http://10.10.1.10:3128',
    'https': 'http://10.10.1.10:1080',
}

response = requests.get('https://www.example.com', proxies=proxies)
  1. 文件上传
files = {'file': open('report.xls', 'rb')}
response = requests.post('https://httpbin.org/post', files=files)
print(response.text)
  1. 流式请求
    对于大文件下载,可以使用流式请求:
response = requests.get('https://www.example.com/bigfile', stream=True)

with open('bigfile', 'wb') as fd:
    for chunk in response.iter_content(chunk_size=128):
        fd.write(chunk)

五、错误处理
requests提供了完善的异常处理机制:

from requests.exceptions import RequestException

try:
    response = requests.get('https://www.example.com', timeout=5)
    response.raise_for_status()  # 检查请求是否成功
except RequestException as e:
    print(f"请求发生错误: {e}")

主要异常类型包括:

ConnectionError:网络连接错误

Timeout:请求超时

TooManyRedirects:重定向过多

HTTPError:HTTP错误响应

RequestException:所有requests异常的基类

六、实际应用案例

  1. 调用REST API
# 获取GitHub用户信息
response = requests.get('https://api.github.com/users/octocat')

if response.status_code == 200:
    user_data = response.json()
    print(f"用户名: {user_data['login']}")
    print(f"仓库数: {user_data['public_repos']}")
else:
    print(f"请求失败,状态码: {response.status_code}")
  1. 网页内容抓取
from bs4 import BeautifulSoup

response = requests.get('https://www.example.com')
soup = BeautifulSoup(response.text, 'html.parser')

# 提取所有链接
for link in soup.find_all('a'):
    print(link.get('href'))
  1. 下载文件
url = 'https://www.example.com/sample.pdf'
response = requests.get(url)

with open('sample.pdf', 'wb') as f:
    f.write(response.content)

七、性能优化建议
使用Session对象:对于需要发送多个请求到同一主机的场景,使用Session可以显著提高性能。

启用连接池:requests默认使用连接池,确保在创建Session时保持默认设置。

设置合理的超时:避免请求长时间挂起,影响程序性能。

流式处理大响应:对于大文件下载,使用stream=True可以避免内存问题。

合理设置请求头:特别是Accept-Encoding可以启用压缩传输。

八、常见问题解答
Q1: 如何处理HTTPS证书验证?

# 禁用证书验证(不推荐生产环境使用)
response = requests.get('https://example.com', verify=False)

# 使用自定义CA证书
response = requests.get('https://example.com', verify='/path/to/cert.pem')

Q2: 如何处理重定向?

# 禁用重定向
response = requests.get('http://example.com', allow_redirects=False)

# 获取重定向历史
print(response.history)

Q3: 如何调试请求?

# 启用详细日志
import logging
import http.client

http.client.HTTPConnection.debuglevel = 1
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
requests_log = logging.getLogger("requests.packages.urllib3")
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True

结语
requests库以其简洁的API和强大的功能,成为Python开发者处理HTTP请求的首选工具。通过本文的介绍,相信你已经掌握了从基础到高级的各种用法。在实际开发中,合理运用这些技巧可以大大提高开发效率和程序稳定性。

最后:
希望你编程学习上不急不躁,按照计划有条不紊推进,把任何一件事做到极致,都是不容易的,加油,努力!相信自己!

文末福利
最后这里免费分享给大家一份Python全套学习资料,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。

包含编程资料、学习路线图、源代码、软件安装包等!【点击这里】领取!
① Python所有方向的学习路线图,清楚各个方向要学什么东西
② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
③ 100多个Python实战案例,学习不再是只会理论
④ 华为出品独家Python漫画教程,手机也能学习

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值