requests 库(发送 http 请求)基本使用指南

这篇具有很好参考价值的文章主要介绍了requests 库(发送 http 请求)基本使用指南。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

requests 是一个 Python 第三方库,用于发送 HTTP 请求。它提供了一种简单和方便的方法来与 Web 服务进行交互,如获取网页内容、发送数据、处理 Cookie 等。

  • requests 是 用 python 语言编写的,比 urllib2 模块更简洁
  • requests 支持 HTTP 连接保持和连接池,支持使用 cookie 保持会话,支持文件上传,支持自动响应内容的编码,支持国际化的URL 和 POST 数据自动编码。
  • 在 python 内置模块的基础上进行了高度的封装,从而使得 python 进行网络请求时,变得人性化,使用 Requests 可以轻而易举的完成浏览器可有的任何操作。
  • requests 会自动实现持久连接 keep-alive

requests 常用 API

常用方法

  • request() :构造一个请求,支持 GET、POST、PUT、DELETE 等方式,返回一个 Response 对象

    第一个参数默认为 method,第二个参数默认为 url

  • get() :发送 Get 请求,返回一个 Response 对象

    第一个参数均默认为 url

    # 发送GET请求并获取响应内容
    response = requests.get("https://www.example.com")
    # 发送带参数的GET请求。字典传递参数,如果值为None的键不会被添加到url中
    params = {'key1': 'value1', 'key2': 'value2'}
    response = requests.get("https://www.example.com", params=params)
    
  • post() :发送 Post 请求,返回一个 Response 对象

    第一个参数均默认为 url

    import requests
    import json
    
    # 发送POST请求并传递数据
    data = {'key1': 'value1', 'key2': 'value2'}
    response = requests.post("https://www.example.com", data=data)
    # 发送JSON数据
    headers = {'Content-Type': 'application/json'}
    response = requests.post("https://www.example.com", data=json.dumps(data), headers=headers)
    
  • Session() :获取会话对象。能够跨请求保持某些参数

    requests.get() 或 requests.post() 等都是一次性请求,如果需要传参 cookies 或 headers,则每次请求都需要传参。

    如果使用 session 来发起请求,session 实例在请求了一个网站后,对方服务器设置在本地的 cookie 会自动保存在 session 对象中,下一次再使用 session 请求对方服务器的时候,会直接带上前一次的 cookie,从而实现回话保持。

    session = requests.Session()  # cookies或者session或者token保存于session对象中
    session.auth = ('auth','passwd')
    session.headers = {'key':'value'}
    response = session.get('url')
    

方法常用参数

  • url :请求地址。发送请求方法的第一个参数均默认为 url

  • data :设置请求体,格式默认为字典

  • params:设置查询参数字典

  • headers:设置请求体,格式为字典

  • timeout :设置秒数超时,仅对于连接有效

    一旦超过这个时间还没获得响应内容,就会提示错误(需要异常处理)

    try:
    	res = requests.get(url = 'url',timeout=1)
    except exceptions.Timeout as e:
        print(e)
    except exceptions.HTTPError as e:
        print(e)
    
  • cookies :设置 cookies

  • proxies :设置访问代理。通过代理可设置抓包

    proxies = requests.get('url', proxies={'http':'[协议:]ip1:端口','https':'[协议:]ip2:端口'})
    
    # 如果代理需要用户名和密码,则需要这样:
    proxies = {"http": "http://user:password@ip:端口", }
    
  • files :设置文件发送

    files = {'file': open('report.xls', 'rb')}
    #files = {'file': ('report.jpg', open('report.xls', 'rb'))}     # 显式的设置文件名
    r = requests.post('http://m.ctrip.com', files=files)
    
  • auth :设置身份验证

    import requests
    from requests.auth import HTTPBasicAuth
     
    resp = requests.get('url', auth=HTTPBasicAuth('user', 'passwd'))
    #resp = requests.get('url', auth=('user', 'passwd'))    # 简写
    #resp = requests.get(URL, auth=HTTPDigestAuth('user', 'pass')	# 摘要式身份认证
    

requests.Response 常用 API

  • 常用属性:

    • encoding :获取当前的编码

    • encoding = ‘utf-8’ :设置编码

    • text :以 encoding 的编码解析返回内容。字符串方式的响应体,会自动根据响应头部的字符编码进行解码。

    • content :以字节形式(二进制)返回。字节方式的响应体,会自动解码 gzip 和 deflate 压缩。

    • headers :以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回 None

    • status_code :响应状态码

    • raw :返回原始响应体,也就是 urllib 的 response 对象,使用 response .raw.read()

    • ok :布尔值,查看 http 请求是否成功(状态码:200)

    • cookies :cookie 信息

    • history :返回重定向信息

      注:可以在请求时加上 allow_redirects = false 阻止重定向

  • 特殊方法:

    • json() :Requests 中内置的 JSON 解码器,以 json 形式返回

      前提返回的内容确保是 json 格式的,不然解析出错会抛异常

    • raise_for_status() :失败请求(非 200 响应)抛出异常


拓展

发送 https 请求并忽略 SSL 证书校验

https 和 SSL 证书介绍

  • HTTPS(HyperText Transfer Protocol Secure)是一种安全的超文本传输协议,它结合了 HTTP 协议和 SSL/TLS 协议。HTTPS 使用 SSL(Secure Sockets Layer)或 TLS(Transport Layer Security)协议来加密和保护通信数据的传输。SSL 和 TLS 用于建立加密连接,保护数据传输的安全性和完整性。

  • HTTPS 和 SSL 证书的关系及工作流程:

    1. 建立安全连接: 客户端发起 HTTPS 请求时,客户端和服务器首先建立一个安全连接。
    2. 握手过程: 这个连接的建立通过 SSL/TLS 握手过程实现。在这个过程中,服务器将自己的 SSL 证书发送给客户端。
    3. 证书验证: 客户端收到服务器的 SSL 证书后,会验证证书的有效性,包括验证证书的签名是否有效,是否过期,是否与请求的域名匹配等。
    4. 密钥交换: 客户端和服务器通过 SSL/TLS 握手过程协商加密算法和密钥,以建立一个加密通道。
    5. 加密通信: 一旦加密通道建立,客户端和服务器之间的数据传输将通过选定的加密算法加密,确保通信的安全性。

    SSL 证书在这个过程中起到关键作用,它用于验证服务器的身份,并确定加密通道的加密参数。服务器的 SSL 证书由受信任的第三方机构(CA)签发,客户端通过信任这些 CA 来验证服务器的身份。

    要实现 HTTPS 通信,需要向一个受信任的 CA 申请 SSL 证书,并将其安装到服务器上。当客户端通过 HTTPS 请求网站时,它们会验证服务器的 SSL 证书,并确保连接是安全的。


requests 发送 https 请求并忽略 SSL 证书校验

  • 在某些情况下,可能需要在使用 requests 发送 HTTPS 请求时忽略 SSL 证书验证,例如在测试环境或自签名证书的情况下。

    可以通过设置 verify 参数为 False 来实现忽略 SSL 证书验证。

    注意:

    • 即使在使用 requests 发送请求时将 verify 参数设置为 False,仍然会进行 SSL/TLS 握手。

      verify=False 只是告诉 requests 跳过 SSL 证书验证,而不会禁止 SSL/TLS 握手过程。

    • SSL/TLS 握手是建立安全连接的关键步骤,它用于协商加密算法、密钥交换和建立加密通道。

      即使不验证服务器的 SSL 证书(使用 verify=False),仍然需要进行 SSL/TLS 握手以确保通信的安全性。

    • 使用 verify=False 时,SSL/TLS 握手过程会进行,但在握手过程中会跳过对服务器 SSL 证书的验证。这意味着即使服务器的证书无效或过期,握手也会继续进行,但连接可能不安全,因为无法保证正在连接到正确的服务器。

    • 如果想完全跳过 SSL/TLS 握手,而不建立安全连接,可以考虑直接使用普通的 HTTP 连接,而不是 HTTPS。

      但这样会使通信不安全,不推荐在生产环境中使用。如果需要安全连接,建议使用合法有效的 SSL 证书,并允许 SSL/TLS 握手过程来确保连接的安全性。

  • [SSL: DH_KEY_TOO_SMALL] dh key too small 报错

    SSL/TLS 握手过程中可能会出现 DH(即 Diffie-Hellman,密钥交换协议/算法)密钥长度过小的问题。这通常是由于使用过小的 DH 密钥长度或不安全的DH密钥交换算法导致的。

    在新的 SSL/TLS 标准中,强制要求使用安全的密钥长度和加密算法,以确保通信的安全性。一些旧的、不安全的加密算法或密钥长度会被标记为不安全,因此会导致类似的错误。

    **解决方案:**在请求中设置合适的 ciphers 来排除 DH 密钥长度过小的加密套件。但这并不是安全的解决办法,因为它会降低通信的安全性。

    • 方式1:使用 ssl_default_context 指定允许的加密算法

      import requests
      import ssl
      
      url = 'https://example.com'  # 替换为你要请求的 HTTPS URL
      # 禁用 SSL 校验
      ssl_context = ssl.create_default_context()
      ssl_context.check_hostname = False
      ssl_context.verify_mode = ssl.CERT_NONE
      # 指定允许的加密算法
      ciphers = 'HIGH:!DH:!aNULL'
      ssl_context.set_ciphers(ciphers)
      # 忽略警告
      urllib3.disable_warnings()
      # 发送 HTTPS 请求
      response = requests.get(url, verify=ssl_context)
      
    • 方式2:使用 requests.packages.urllib3 包指定允许的加密算法

      可以使用 requests.packages.urllib3 包来处理与 SSL 相关的功能。在这种情况下,可以使用 DEFAULT_CIPHERS 常量来设置默认的加密算法。

      注意:requests.packages.urllib3 静态编译可能会显示找不到,忽略即可,因为其可能是动态加载的文章来源地址https://www.toymoban.com/news/detail-727305.html

      import requests
      
      url = 'https://example.com'  # 替换为你要请求的 HTTPS URL
      # 设置默认加密算法为 HIGH:!DH:!aNULL。
      requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS += ':HIGH:!DH:!aNULL'
      # 忽略警告
      requests.packages.urllib3.disable_warnings()
      # 发送 HTTPS 请求
      response = requests.get(url, verify=False)
      

到了这里,关于requests 库(发送 http 请求)基本使用指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python requests.get发送Http请求响应结果乱码、Postman请求结果正常

    最近在写爬虫程序,自己复制网页http请求的url、头部,使用python requests和postman分别请求,结果使用postman发送http get请求,可以得到正常的json数据,但是使用python的requests发送则接受到乱码,response.text的内容是: response.content的内容是: 十分费解,于是网上搜索了相关内容,

    2024年01月24日
    浏览(54)
  • 【Jmeter】HTTP请求(HTTP Request) - 配置基本HTTP请求

    右击 Thread (线程组) 鼠标移至 Add (添加) → Sampler (取样器) 点击 HTTP Rrequest (HTTP请求头) 即可完成HTTP请求新建 进入 HTTP Rrequest (HTTP请求头) 页面 输入 Protocol (传输协议类型) ,不输入默认为HTTP请求 输入 Server Name or IP (服务器或IP地址) 输入 Port Number (端口号),没有端口号则不输入

    2024年02月14日
    浏览(41)
  • requests 库:发送 form-data 格式的 http 请求 (python)

    requests官方网站地址 requests_toolbelt Python自动化 requests 库:发送 form-data 格式的 http 请求 requests-toolbelt · PyPI

    2024年02月03日
    浏览(52)
  • vue2,使用element中的Upload 上传文件,自定义上传http-request上传,上传附件支持多选,多个文件只发送一次请求,代码里有注释

    复制直接使用,组件根据multiple是否多选来返回附件内容,支持多选就返回数据附件,则返回一个附件对象。

    2024年02月10日
    浏览(55)
  • 软件测试|Python requests库的安装和使用指南

    简介 requests 库是Python中一款流行的HTTP请求库,用于简化HTTP请求的发送和处理,也是我们在使用Python做接口自动化测试时,最常用的第三方库。本文将介绍如何安装和使用requests库,以及一些常见的用例示例。 安装requests库 首先,我们要先安装好Python环境。然后,可以使用

    2024年02月02日
    浏览(87)
  • 实战指南:使用Spring Boot实现消息的发送和接收

    当涉及到消息发送和接收的场景时,可以使用Spring Boot和消息中间件RabbitMQ来实现。下面是一个简单的示例代码,展示了如何在Spring Boot应用程序中创建消息发送者和接收者,并发送和接收一条消息。 首先,你需要进行以下准备工作 确保你已经安装了Java和Maven,并设置好相应

    2024年02月11日
    浏览(51)
  • Python Matplotlib 库使用基本指南

    简介 Matplotlib 是一个广泛使用的 Python 数据可视化库,它可以创建各种类型的图表、图形和可视化效果。无论是简单的折线图还是复杂的热力图,Matplotlib 提供了丰富的功能来满足我们的数据可视化需求。本指南将详细介绍如何安装、基本绘图函数以及常见图表类型的绘制方法

    2024年02月02日
    浏览(44)
  • Pytest精通指南(01)介绍与基本使用

    Pytest 简介 Pytest是一个功能强大的Python测试框架,它简化了测试编写的复杂性,并提供了丰富的插件生态系统,以满足各种复杂的测试需求。 与Python内置的 unittest 框架相比, Pytest 的语法更简洁、更易于理解,支持参数化测试、测试固件(fixtures)、断言重写等高级功能。 此

    2024年04月16日
    浏览(36)
  • Redis - Python 客户端基本使用指南

    参考:python 模块Redis模块,连接Redis数据库 Python 中的 Redis 客户端库允许开发者与 Redis 数据库进行交互。这些库允许在 Python 中连接到 Redis、执行命令以读取或写入数据,并处理 Redis 数据。 以下是一些常见的 Python Redis 客户端库: redis 库:是 Python 中最常用的 Redis 客户端库之

    2024年02月08日
    浏览(41)
  • Python 包管理(pip、conda)基本使用指南

    介绍 Python 有丰富的开源的第三方库和包,可以帮助完成各种任务,扩展 Python 的功能,例如 NumPy 用于科学计算,Pandas 用于数据处理,Matplotlib 用于绘图等。在开始编写 Pytlhon 程序之前,可能需要安装一些常用的Python库,以便在编程过程中能够轻松地使用它们。 为了方便地管

    2024年02月11日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包