• Python-requests库入门指南


    介绍

    Python编写的HTTP库,能够发送HTTP和HTTPS请求,并且获取响应。在测试服务器响应方面经常使用。

    下载

    pip install requests

    使用

    常用的格式

    • requests.get(url, params=None, **kwargs)
    • requests.post(url, data=None, json=None, **kwargs)

    参数介绍 

    Requests库中的参数可以分为两个阶段:发起请求时的参数和获取响应后的参数。下面我们来详细看看这两个阶段的参数。

    发起请求时的参数

    • method:请求方法,常用的有 GET、POST、PUT、HEAD、OPTIONS、PATCH 等。
    • url:请求地址,即你想要访问的目标 URL。
    • data:请求 BADY,可选参数,用于在请求中传递数据。它可以接受不同类型的数据,包括字符串、字典和文件。
    • params:查询参数,可选参数,用于指定请求中的查询参数。这允许你在 URL 中附加额外的参数以进行请求。
    • json:JSON 数据,可选参数,用于指定要发送的 JSON 数据。系统会自动将字典转化为 JSON 数据。
    • files:上传文件,可选参数,用于文件上传。你可以传递文件对象以上传到服务器。
    • proxies:设置代理,可选参数,允许你通过代理服务器发送请求,以访问受限制的资源。
    • headers:请求头,可选参数,用于自定义设置 HTTP 请求头信息。
    • cookies:Cookie,可选参数,用于发送 HTTP 请求时传递的 Cookie 信息。通常用于模拟已登录状态。
    • allow_redirects:是否允许重定向,默认为 True。
    • verify:是否验证 HTTPS 证书,默认为 True。
    • timeout:设置请求超时时间,以秒为单位。

    以下是一个示例,展示了如何使用这些参数发起GET请求:

    1. # 导入requests包
    2. import requests
    3. # 自定义请求头
    4. headers = {"Content-Type": "application/x-www-form-urlencoded"}
    5. # 添加cookie
    6. cookies = {'session_id': 'abcdef12345'}
    7. # 添加请求BADY
    8. data = "username=admin&password=123456&verifycode=0123"
    9. # 添加代理
    10. proxies = {
    11. 'http':'http://127.0.0.1:8888',
    12. 'https':'http://127.0.0.1:8888'
    13. }
    14. # 发送post请求
    15. response = requests.get('https://www.baidu.com',data = data,headers = headers,cookies = cookies,proxies = proxies)

    获取响应时的参数

    • status_code:响应状态码。
    • headers:响应的请求头信息。
    • request.headers:发送HTTP请求时的请求头部信息
    • encoding:响应的编码格式。
    • content:响应体,字节类型,包含原始的二进制信息。
    • text:响应体,字符串类型,会自动根据 HTTP 头部的编码信息返回内容。
    • cookies:响应对应请求的 Cookie 信息,是一个 RequestsCookieJar 对象。

    注:headers 和 request.headers 是不同的请求头信息,前者是响应的请求头,后者是对于请求所响应

    以下是一个示例,展示了如何使用这些参数获取响应的信息:

    1. # 导入requests包
    2. >>> import requests
    3. # 发送get请求
    4. >>> response = requests.get('https://www.baidu.com/s?wd=上海')
    5. # 获取响应的状态码
    6. >>> status_code = response.status_code
    7. 200
    8. # 获取响应的响应头
    9. >>> headers = response.headers
    10. {'Accept-Ranges': 'bytes', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive', 'Content-Length': '227', 'Content-Security-Policy': "frame-ancestors 'self' https://chat.baidu.com http://mirror-chat.baidu.com https://fj-chat.baidu.com https://hba-chat.baidu.com https://hbe-chat.baidu.com https://njjs-chat.baidu.com https://nj-chat.baidu.com https://hna-chat.baidu.com https://hnb-chat.baidu.com http://debug.baidu-int.com;", 'Content-Type': 'text/html', 'Date': 'Tue, 19 Sep 2023 04:48:23 GMT', 'P3p': 'CP=" OTI DSP COR IVA OUR IND COM ", CP=" OTI DSP COR IVA OUR IND COM "', 'Pragma': 'no-cache', 'Server': 'BWS/1.1', 'Set-Cookie': 'BD_NOT_HTTPS=1; path=/; Max-Age=300, BIDUPSID=C6D797F5E9E2D3B9FFE04CE0338CC619; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com, PSTM=1695098903; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com, BAIDUID=C6D797F5E9E2D3B904C8EFA4EBC80FD9:FG=1; max-age=31536000; expires=Wed, 18-Sep-24 04:48:23 GMT; domain=.baidu.com; path=/; version=1; comment=bd', 'Traceid': '1695098903054653569015203487008619068969', 'X-Ua-Compatible': 'IE=Edge,chrome=1'}
    11. # 获取响应对应请求的请求头
    12. >>> header = response.request.headers
    13. {'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
    14. # 获取响应的编码格式
    15. >>> encoding = response.encoding
    16. ISO-8859-1
    17. # 获取响应的二进制信息(响应体)
    18. >>> content = response.content
    19. b'\r\n\r\n\t\r\n\r\n\r\n\t\r\n\r\n'
    20. # 获取响应的文本内容
    21. >>> text = response.text
    22. # 获取响应的cookie
    23. >>> cookie = response.cookies
    24. 1 for www.baidu.com/>, for .baidu.com/>, 1695099613 for .baidu.com/>, 1 for .baidu.com/>]>

    常用使用方式

    会话管理

    1. import requests
    2. session = requests.Session()
    3. session.get('https://www.baidu.com/login', params={'user': 'username', 'pass': 'password'})
    4. response = session.get('https://www.baidu.com/dashboard')

    文件上传

    1. import requests
    2. files = {'file': open('文件名+后缀', 'rb')}
    3. response = requests.post('https://example.com/upload', files=files)

    代理设置

    1. import requests
    2. proxies = {'http': 'http://proxy.example.com', 'https': 'https://proxy.example.com'}
    3. response = requests.get('https://example.com', proxies=proxies)

    使用get获取图片

    1. import requests
    2. resp = requests.get('https://pic2.zhimg.com/v2-dad4bf18cb546d9c52ade85d4fba6225_r.jpg')
    3. # Response对象.content: 返回响应的二进制字节串
    4. print(resp.content)
    5. with open('宋茜.jpg', 'wb') as f:
    6. f.write(resp.content)

    请求验证

    1. import requests
    2. # verify默认为True,意思是需要做证书校验
    3. # 如果不希望检查证书,可以将verify设置为False,否则需要指定cert关键字,给出证书的路径
    4. # 针对HTTPS请求做证书校验
    5. resp = requests.get('https://www.woniuxy.com/', verify=True, cert='C://tls.pem')
    6. # 不做证书校验
    7. resp2 = requests.get('https://www.woniuxy.com/', verify=False)
    8. print(resp.status_code)
    9. print(resp.text)
  • 相关阅读:
    集成GPT-4的Cursor智能代码生成器,如何免费使用?
    触摸控件——键盘录入之RTC录入
    网关中间件-Nginx(二)
    c++_learning-c++标准库STL和boost库
    CsPbI3钙钛矿量子点 CsPbI3 QDs发射波长670±10nm
    使用 TiDB Dashboard 诊断报告定位问题
    生产者消费者模型
    python基于PHP+MySQL的健身俱乐部网站的设计与实现
    Jetpack之Navigation的使用(一)
    类与对象(中级)
  • 原文地址:https://blog.csdn.net/m0_54958293/article/details/132910591