【Python快速上手(二十九)】- Python requests 模块详解

Python快速上手(二十九)-Python requests 模块详解

Python3 requests模块详解

Python的requests模块是一个用于发送HTTP请求的流行库,它比内置的urllib库更易用且功能强大。requests模块提供了简单的API,可以处理复杂的HTTP请求,处理Cookie、会话、重定向等功能。本文将详细讲解requests模块的基本用法、发送请求、处理响应、会话管理、异常处理和实际应用案例。

1. requests模块简介

requests模块是一个用于发送HTTP请求的第三方库,支持HTTP/1.1,并且具有良好的支持和文档。要使用requests模块,首先需要安装它:

pip install requests

2. 基本用法

2.1 发送GET请求
发送GET请求是requests模块中最基本的操作,可以使用requests.get方法:

import requests

response = requests.get('https://api.github.com')
print(response.status_code)  # 输出状态码
print(response.text)  # 输出响应内容

2.2 发送POST请求
发送POST请求可以使用requests.post方法,并传递数据:

import requests

data = {'key': 'value'}
response = requests.post('https://httpbin.org/post', data=data)
print(response.status_code)
print(response.json())  # 输出JSON响应内容

3. 处理请求参数

3.1 URL参数
可以使用params参数来传递URL参数:

import requests

params = {'q': 'python', 'sort': 'stars'}
response = requests.get('https://api.github.com/search/repositories', params=params)
print(response.url)  # 查看完整的请求URL
print(response.json())

3.2 表单数据
可以使用data参数来传递表单数据:

import requests

data = {'username': 'user', 'password': 'pass'}
response = requests.post('https://httpbin.org/post', data=data)
print(response.json())

3.3 JSON数据
可以使用json参数来传递JSON数据:

import requests

json_data = {'key': 'value'}
response = requests.post('https://httpbin.org/post', json=json_data)
print(response.json())

4. 处理响应

4.1 响应状态码
可以使用status_code属性来获取响应的状态码:

import requests

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

4.2 响应内容
可以使用text属性来获取响应的文本内容,使用json方法来获取JSON格式的响应内容:

import requests

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

4.3 响应头
可以使用headers属性来获取响应头:

import requests

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

5. 处理请求头

可以使用headers参数来设置请求头:

import requests

headers = {'User-Agent': 'my-app/0.0.1'}
response = requests.get('https://api.github.com', headers=headers)
print(response.status_code)

6. 会话管理

requests模块提供了会话对象,可以在多个请求之间保持某些参数:

6.1 创建会话
可以使用requests.Session创建会话对象:

import requests

session = requests.Session()
response = session.get('https://httpbin.org/cookies/set/sessioncookie/123456789')
print(response.text)

6.2 共享会话参数
会话对象可以共享Cookies、头信息等参数:

import requests

session = requests.Session()
session.headers.update({'User-Agent': 'my-app/0.0.1'})

response = session.get('https://httpbin.org/headers')
print(response.json())

7. 文件上传

可以使用files参数来上传文件:

import requests

files = {'file': open('report.txt', 'rb')}
response = requests.post('https://httpbin.org/post', files=files)
print(response.json())

8. 文件下载

可以使用requests.get方法并将响应内容写入文件来下载文件:

import requests

url = 'https://httpbin.org/image/png'
response = requests.get(url)
with open('image.png', 'wb') as file:
    file.write(response.content)
print('File downloaded successfully')

9. 超时设置

可以使用timeout参数来设置请求超时时间:

import requests

try:
    response = requests.get('https://httpbin.org/delay/10', timeout=5)
except requests.exceptions.Timeout:
    print('The request timed out')

10. 重定向与历史记录

requests会自动处理重定向,可以使用history属性查看重定向历史:

import requests

response = requests.get('http://github.com')
print(response.url)
print(response.history)

11. 异常处理

requests模块定义了一系列异常类,用于处理请求过程中可能发生的错误:

import requests

try:
    response = requests.get('https://httpbin.org/status/404')
    response.raise_for_status()  # 如果响应状态码不是200,抛出HTTPError
except requests.exceptions.HTTPError as err:
    print('HTTP error occurred:', err)
except requests.exceptions.ConnectionError as err:
    print('Connection error occurred:', err)
except requests.exceptions.Timeout as err:
    print('Timeout error occurred:', err)
except requests.exceptions.RequestException as err:
    print('An error occurred:', err)

12. 认证

12.1 基本认证
可以使用auth参数进行基本认证:

import requests
from requests.auth import HTTPBasicAuth

response = requests.get('https://httpbin.org/basic-auth/user/pass', auth=HTTPBasicAuth('user', 'pass'))
print(response.json())

12.2 其他认证方式
requests模块还支持OAuth、JWT等其他认证方式,可以使用第三方库如requests-oauthlib来实现。

13. 高级用法

13.1 代理
可以使用proxies参数来设置代理:

import requests

proxies = {
    'http': 'http://10.10.1.10:3128',
    'https': 'http://10.10.1.10:1080',
}
response = requests.get('https://httpbin.org/get', proxies=proxies)
print(response.json())

13.2 流式请求
可以使用stream参数来进行流式请求,适用于下载大文件:

import requests

url = 'https://httpbin.org/stream/20'
response = requests.get(url, stream=True)

for line in response.iter_lines():
    if line:
        print(line)

13.3 自定义适配器
可以自定义HTTP适配器来控制底层的HTTP连接行为:

from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry

class MyAdapter(HTTPAdapter):
    def send(self, request, **kwargs):
        print('Custom send method')
        return super().send(request, **kwargs)

session = requests.Session()
session.mount('https://', MyAdapter())
response = session.get('https://httpbin.org/get')
print(response.status_code)

14. 实际应用案例

14.1 API调用
以下示例展示了如何使用requests模块调用GitHub API:

import requests

url = 'https://api.github.com/repos/psf/requests'
response = requests.get(url)
data = response.json()
print(f"Repository: {data['name']}")
print(f"Description: {data['description']}")
print(f"Stars: {data['stargazers_count']}")
print(f"Forks: {data['forks_count']}")

14.2 网页抓取
以下示例展示了如何使用requests模块抓取网页内容并使用BeautifulSoup进行解析:

import requests
from bs4 import BeautifulSoup

url = 'https://www.python.org'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

print('Page title:', soup.title.string)

14.3 自动化表单提交
以下示例展示了如何使用requests模块自动化提交表单:

import requests

url = 'https://httpbin.org/forms/post'
data = {'name': 'John', 'email': 'john@example.com'}
response = requests.post(url, data=data)
print(response.json())
  • 23
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值