Pythonrequests库轻松发送HTTP请求的终极指南

Written by

in

文章目录
  • 在现代网络编程中,HTTP请求是与Web服务交互的基础。Python中的requests库以其简洁优雅的API设计,成为开发者发送HTTP请求的首选工具。本文将全面介绍requests库的使用方法,从基础请求到高级技巧,帮助你掌握网络数据交互的核心技能。
  • requests是一个基于Python开发的HTTP库,比Python标准库中的urllib更加简单易用。它具有以下特点: 人性化的API设计 支持连接保持和连接池 支持文件上传 自动内容解码 国际化域名和URL 自动实现持久连接 安装requests pip install requests
  • 1.GET请求 GET是最常用的HTTP方法,用于从服务器获取资源。 import requests # 基本GET请求 response = requests.get(‘https://www.example.com’) # 打印响应状态码 print(response.status_code) # 打印响应内容 print(response.text) 2.带参数的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 3.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) 2.响应状态码 response = requests.get(‘https://www.example.com’) # 状态码 print(response.status_code) # 状态码是否成功(200-400范围内) print(response.ok) # 抛出HTTP错误(如果请求失败) response.raise_for_status() 3.请求头与响应头 # 自定义请求头 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’])
  • 超时设置 # 设置超时时间(秒) try: response = requests.get(‘https://www.example.com’, timeout=3) except requests.exceptions.Timeout: print(“请求超时”) 会话对象(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 代理设置 proxies = { ‘http’: ‘http://10.10.1.10:3128’, ‘https’: ‘http://10.10.1.10:1080’, } response = requests.get(‘https://www.example.com’, proxies=proxies) 文件上传 files = {‘file’: open(‘report.xls’, ‘rb’)} response = requests.post(‘https://httpbin.org/post’, files=files) print(response.text) 流式请求 对于大文件下载,可以使用流式请求: 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异常的基类
  • 调用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}”) 网页内容抓取 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’)) 下载文件 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 requests库轻松发送HTTP请求的终极指南的文章就介绍到这了,更多相关Python requests发送HTTP请求内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: python使用requests库实现轻松发起HTTP请求 Python中的HTTP请求库Requests的具体使用 Python使用requests模块发送http请求的方法介绍 python用requests实现http请求代码实例 python 使用 requests 模块发送http请求 的方法
  • 目录
    • 前言
    • 一、requests库简介
    • 二、发送基本HTTP请求
    • 三、请求与响应处理
    • 四、高级请求技巧
    • 五、错误处理
    • 六、实际应用案例
    • 七、性能优化建议
    • 八、常见问题解答
    • 结语

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

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

    人性化的API设计

    支持连接保持和连接池

    支持文件上传

    自动内容解码

    国际化域名和URL

    自动实现持久连接

    安装requests

    pip install requests
    

    1.GET请求

    GET是最常用的HTTP方法,用于从服务器获取资源。

    import requests
    
    # 基本GET请求
    response = requests.get('https://www.example.com')
    
    # 打印响应状态码
    print(response.status_code)
    
    # 打印响应内容
    print(response.text)
    

    2.带参数的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
    

    3.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)
    

    2.响应状态码

    response = requests.get('https://www.example.com')
    
    # 状态码
    print(response.status_code)
    
    # 状态码是否成功(200-400范围内)
    print(response.ok)
    
    # 抛出HTTP错误(如果请求失败)
    response.raise_for_status()
    

    3.请求头与响应头

    # 自定义请求头
    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'])
    

    超时设置

    # 设置超时时间(秒)
    try:
        response = requests.get('https://www.example.com', timeout=3)
    except requests.exceptions.Timeout:
        print("请求超时")
    

    会话对象(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
    

    代理设置

    proxies = {
        'http': 'http://10.10.1.10:3128',
        'https': 'http://10.10.1.10:1080',
    }
    
    response = requests.get('https://www.example.com', proxies=proxies)
    

    文件上传

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

    流式请求

    对于大文件下载,可以使用流式请求:

    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异常的基类

    调用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}")
    

    网页内容抓取

    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'))
    

    下载文件

    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 requests库轻松发送HTTP请求的终极指南的文章就介绍到这了,更多相关Python requests发送HTTP请求内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • python使用requests库实现轻松发起HTTP请求
    • Python中的HTTP请求库Requests的具体使用
    • Python使用requests模块发送http请求的方法介绍
    • python用requests实现http请求代码实例
    • python 使用 requests 模块发送http请求 的方法

    站内搜索