Python requests库 概述

发布时间:2023年12月28日

Python的requests库是一个非常流行的HTTP客户端库,用于发送HTTP请求。它提供了一个简单易用的API,使发送各种HTTP请求变得非常简单。

安装方式:

#1.直接安装
$ python3 -m pip install requests
 
#2. 源码安装
$ git clone https://github.com/psf/requests.git
$ curl -OL https://github.com/psf/requests/tarball/main
$ cd requests
$ python -m pip install .

代码结构:

root@tiger:/usr/lib/python3/dist-packages/requests# tree
.
|-- __init__.py
|-- __pycache__
|   |-- __init__.cpython-37.pyc
|   |-- __version__.cpython-37.pyc
|   |-- _internal_utils.cpython-37.pyc
|   |-- adapters.cpython-37.pyc
|   |-- api.cpython-37.pyc
|   |-- auth.cpython-37.pyc
|   |-- certs.cpython-37.pyc
|   |-- compat.cpython-37.pyc
|   |-- cookies.cpython-37.pyc
|   |-- exceptions.cpython-37.pyc
|   |-- help.cpython-37.pyc
|   |-- hooks.cpython-37.pyc
|   |-- models.cpython-37.pyc
|   |-- packages.cpython-37.pyc
|   |-- sessions.cpython-37.pyc
|   |-- status_codes.cpython-37.pyc
|   |-- structures.cpython-37.pyc
|   `-- utils.cpython-37.pyc
|-- __version__.py
|-- _internal_utils.py
|-- adapters.py
|-- api.py
|-- auth.py
|-- certs.py
|-- compat.py
|-- cookies.py
|-- exceptions.py
|-- help.py
|-- hooks.py
|-- models.py
|-- packages.py
|-- sessions.py
|-- status_codes.py
|-- structures.py
`-- utils.py

简单示例
请求一个url,并解析获取相关字段

root@xxx:/usr/lib/python3/dist-packages/requests# python3
Python 3.7.3 (default, Oct 11 2023, 09:51:27)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>> r = requests.get('https://api.github.com/events')
>>> print(r)
<Response [200]>
>>> print(r.status_code)
200
>>> print(r.headers)
{'Server': 'GitHub.com', 'Date': 'Thu, 28 Dec 2023 00:55:38 GMT', 'Content-Type': 'application/json; charset=utf-8', 'Cache-Control': 'public, max-age=60, s-maxage=60', 'Vary': 'Accept, Accept-Encoding, Accept, X-Requested-With', 'ETag': 'W/"118c70bc36740e04a1feac9afabdf955d0ce981d7fafcdc796fa60f75b1d7b65"', 'Last-Modified': 'Thu, 28 Dec 2023 00:50:38 GMT', 'X-Poll-Interval': '60', 'X-GitHub-Media-Type': 'github.v3; format=json', 'Link': '<https://api.github.com/events?page=2>; rel="next", <https://api.github.com/events?page=10>; rel="last"', 'x-github-api-version-selected': '2022-11-28', 'Access-Control-Expose-Headers': 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset', 'Access-Control-Allow-Origin': '*', 'Strict-Transport-Security': 'max-age=31536000; includeSubdomains; preload', 'X-Frame-Options': 'deny', 'X-Content-Type-Options': 'nosniff', 'X-XSS-Protection': '0', 'Referrer-Policy': 'origin-when-cross-origin, strict-origin-when-cross-origin', 'Content-Security-Policy': "default-src 'none'", 'Content-Encoding': 'gzip', 'X-RateLimit-Limit': '60', 'X-RateLimit-Remaining': '58', 'X-RateLimit-Reset': '1703728177', 'X-RateLimit-Resource': 'core', 'X-RateLimit-Used': '2', 'Accept-Ranges': 'bytes', 'Transfer-Encoding': 'chunked', 'X-GitHub-Request-Id': '49DB:64ABC:8EB0C:99747:658CC78A'}
>>> print(r.con)
r.connection  r.content
>>> print(r.content)
b'[{"id":"34439992153",
>>>

更多响应字段

https://requests.readthedocs.io/en/latest/api/

print(r.__ditc__)#打印查看

举例说明:
apparent_encoding 编码方式

>>> print(r.apparent_encoding)
Windows-1254

close() 关闭与服务器的连接

>>> print(r.close())
None

content 返回响应的内容,以字节为单位

>>> print(r.con
r.connection  r.content
>>> print(r.content)
b'[{"id":"34439992153","type":"P

cookies 返回一个 CookieJar 对象,包含了从服务器发回的 cookie

>>> print(r.cookies)
<RequestsCookieJar[]>

elapsed 返回一个 timedelta 对象,包含了从发送请求到响应到达之间经过的时间量,可以用于测试响应速度。比如 r.elapsed.microseconds 表示响应到达需要多少微秒。

>>> print(r.elapsed)
0:00:00.765033

encoding 解码 r.text 的编码方式

>>> print(r.encoding)
utf-8

headers 返回响应头,字典格式

>>> print(r.headers)
{'Server': 'GitHub.com', 'Date': 'Thu, 28 Dec 2023 00:55:38 GMT', 'Content-Type': 'application/json; charset=utf-8', 'Cache-Control': 'public, max-age=60, s-maxage=60', 'Vary': 'Accept, Accept-Encoding, Accept, X-Requested-With', 'ETag': 'W/"118c70bc36740e04a1feac9afabdf955d0ce981d7fafcdc796fa60f75b1d7b65"', 'Last-Modified': 'Thu, 28 Dec 2023 00:50:38 GMT', 'X-Poll-Interval': '60', 'X-GitHub-Media-Type': 'github.v3; format=json', 'Link': '<https://api.github.com/events?page=2>; rel="next", <https://api.github.com/events?page=10>; rel="last"', 'x-github-api-version-selected': '2022-11-28', 'Access-Control-Expose-Headers': 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset', 'Access-Control-Allow-Origin': '*', 'Strict-Transport-Security': 'max-age=31536000; includeSubdomains; preload', 'X-Frame-Options': 'deny', 'X-Content-Type-Options': 'nosniff', 'X-XSS-Protection': '0', 'Referrer-Policy': 'origin-when-cross-origin, strict-origin-when-cross-origin', 'Content-Security-Policy': "default-src 'none'", 'Content-Encoding': 'gzip', 'X-RateLimit-Limit': '60', 'X-RateLimit-Remaining': '58', 'X-RateLimit-Reset': '1703728177', 'X-RateLimit-Resource': 'core', 'X-RateLimit-Used': '2', 'Accept-Ranges': 'bytes', 'Transfer-Encoding': 'chunked', 'X-GitHub-Request-Id': '49DB:64ABC:8EB0C:99747:658CC78A'}

history 返回包含请求历史的响应对象列表(url)

>>> print(r.history)
[]

is_permanent_redirect 如果响应是永久重定向的 url,则返回 True,否则返回 False

>>> print(r.is_permanent_redirect)
False

is_redirect 如果响应被重定向,则返回 True,否则返回 False

>>> print(r.is_redirect)
False

iter_content() 迭代响应

>>> print(r.iter_content)
<bound method Response.iter_content of <Response [200]>>

iter_lines() 迭代响应的行

>>> print(r.iter_lines)
<bound method Response.iter_lines of <Response [200]>>

json() 返回结果的 JSON 对象 (结果需要以 JSON 格式编写的,否则会引发错误)

>>> print(r.json())
[{'id': '34439992153', 'type': 'PushEvent', 'actor':...

links 返回响应的解析头链接

>>> print(r.links)
{'next': {'url': 'https://api.github.com/events?page=2', 'rel': 'next'}, 'last': {'url': 'https://api.github.com/events?page=10', 'rel': 'last'}}

next 返回重定向链中下一个请求的 PreparedRequest 对象

>>> print(r.next)
None

ok 检查 “status_code” 的值,如果小于400,则返回 True,如果不小于 400,则返回 False

>>> print(r.ok)
True

raise_for_status() 如果发生错误,方法返回一个 HTTPError 对象

>>> print(r.raise_for_status)
<bound method Response.raise_for_status of <Response [200]>>

reason 响应状态的描述,比如 “Not Found” 或 “OK”

>>> print(r.reason)
OK

request 返回请求此响应的请求对象

>>> print(r.request)
<PreparedRequest [GET]>

status_code 返回 http 的状态码,比如 404 和 200(200 是 OK,404 是 Not Found)

>>> print(r.status_code)
200

text 返回响应的内容,unicode 类型数据

>>> print(r.text)
[{"id":"34439992153"...

url 返回响应的 URL

>>> print(r.url)
https://api.github.com/events

Python的requests库有很多方法,以下是一些常用的方法:
GET方法:
用于发送GET请求,可以通过url和params参数来指定请求的URL和参数

response = requests.get('https://www.example.com', params={'key': 'value'})

POST方法:
用于发送POST请求,可以通过url、params和json参数来指定请求的URL、参数和JSON数据1。

response = requests.post('https://www.example.com', data={'key': 'value'})

PUT方法:
用于发送PUT请求,可以通过url、params和json参数来指定请求的URL、参数和JSON数据。

response = requests.put('https://www.example.com/path', json={'key': 'value'})

DELETE方法:
用于发送DELETE请求,可以通过url和params参数来指定请求的URL和参数。

response = requests.delete('https://www.example.com/path', params={'key': 'value'})

HEAD方法:
用于发送HEAD请求,与GET请求类似,但只返回请求头信息,不返回实际数据。

response = requests.head('https://www.example.com')

OPTIONS方法:
用于发送OPTIONS请求,可以获取目标URL支持的HTTP方法等信息。

response = requests.options('https://www.example.com')

GET请求:这是最常用的请求方法。当你想要从服务器获取数据时,通常会使用GET请求。GET请求将数据作为URL参数进行传递。例如,当你点击一个搜索引擎的搜索结果链接时,你的浏览器就会发送一个GET请求来获取网页内容。

POST请求:当你想在服务器上提交或更新数据时,通常会使用POST请求。例如,在提交表单或在网页上上传文件时,会使用POST请求。POST请求将数据包含在HTTP请求体中,而不是作为URL参数进行传递。

PUT请求:与POST请求类似,PUT请求也是用于更新资源。然而,PUT请求通常用于更新特定资源,而不是一次性更新多个资源。PUT请求通常用于更新服务器上的文件或数据库记录。

DELETE请求:当你想从服务器上删除资源时,会使用DELETE请求。DELETE请求通常用于删除服务器上的文件或数据库记录。

HEAD请求:与GET请求类似,但HEAD请求只返回HTTP头部信息,而不返回实际的数据体。通常用于检查资源的元数据(如内容长度、MIME类型等)。

OPTIONS请求:当你想了解目标URL支持哪些HTTP方法时,可以使用OPTIONS请求。OPTIONS请求返回服务器支持的HTTP方法列表,如GET、POST、PUT、DELETE等。

文章来源:https://blog.csdn.net/qq_34399969/article/details/135260319
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。