- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章python三方库之requests的快速上手由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文基于2.21.0 。
发送请求 。
发送GET请求:
1
|
r
=
requests.get(
'https://api.github.com/events'
)
|
发送POST请求:
1
|
r
=
requests.post(
'https://httpbin.org/post'
, data
=
{
'key'
:
'value'
})
|
其他请求接口与HTTP请求类型一致,如PUT, DELETE, HEAD, OPTIONS等.
在URL查询字符串中使用参数 。
给params参数传递一个字典对象:
1
2
3
4
|
>>> payload
=
{
'key1'
:
'value1'
,
'key2'
:
'value2'
}
>>> r
=
requests.get(
'https://httpbin.org/get'
, params
=
payload)
>>>
print
(r.url)
https:
/
/
httpbin.org
/
get?key2
=
value2&key1
=
value1
|
字典的值也可以是一个列表:
1
2
3
4
|
>>> payload
=
{
'key1'
:
'value1'
,
'key2'
: [
'value2'
,
'value3'
]}
>>> r
=
requests.get(
'https://httpbin.org/get'
, params
=
payload)
>>>
print
(r.url)
https:
/
/
httpbin.org
/
get?key1
=
value1&key2
=
value2&key2
=
value3
|
参数中值为None的键值对不会加到查询字符串 。
文本响应内容 。
Response对象的text属性可以获取服务器响应内容的文本形式,Requests会自动解码:
1
2
3
|
>>> r
=
requests.get(
'https://api.github.com/events'
)
>>> r.text
'[{
"id"
:
"9167113775"
,
"type"
:
"PushEvent"
,
"actor"
...
|
访问Response.text时,Requests将基于HTTP头猜测响应内容编码。使用Response.encoding属性可以查看或改变Requests使用的编码:
1
2
3
|
>>> r.encoding
'utf-8'
>>> r.encoding
=
'ISO-8859-1'
|
二进制响应内容 。
Response对象的content属性可以获取服务器响应内容的二进制形式:
1
2
|
>>> r.content
b'[{
"id"
:
"9167113775"
,
"type"
:
"PushEvent"
,
"actor"
...
|
JSON响应内容 。
Response对象的json()方法可以获取服务器响应内容的JSON形式:
1
2
3
|
>>> r
=
requests.get(
'https://api.github.com/events'
)
>>> r.json()
[{
'repo'
: {
'url'
: 'https:
/
/
api.github.com
/
...
|
如果JSON解码失败,将抛出异常.
原始响应内容 。
在极少情况下,可能需要访问服务器原始套接字响应。通过在请求中设置stream=True参数,并访问Response对象的raw属性实现:
1
2
3
4
5
|
>>> r
=
requests.get(
'https://api.github.com/events'
, stream
=
True
)
>>> r.raw
<urllib3.response.HTTPResponse
object
at
0x101194810
>
>>> r.raw.read(
10
)
'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03'
|
通常的用法是用下面这种方式将原始响应内容保存到文件,Response.iter_content方法将自动解码gzip和deflate传输编码:
1
2
3
|
with
open
(filename,
'wb'
) as fd:
for
chunk
in
r.iter_content(chunk_size
=
128
):
fd.write(chunk)
|
定制请求头 。
传递一个dict对象到headers参数,可以添加HTTP请求头:
1
2
3
4
|
>>> url
=
'https://api.github.com/some/endpoint'
>>> headers
=
{
'user-agent'
:
'my-app/0.0.1'
}
>>> r
=
requests.get(url, headers
=
headers)
|
定制的header的优先级较低,在某些场景或条件下可能被覆盖.
所有header的值必须是string, bytestring或unicode类型。但建议尽量避免传递unicode类型的值 。
更复杂的POST请求 。
发送form-encoded数据 。
给data参数传递一个字典对象:
1
2
|
>>> payload
=
{
'key1'
:
'value1'
,
'key2'
:
'value2'
}
>>> r
=
requests.post(
"https://httpbin.org/post"
, data
=
payload)
|
如果有多个值对应一个键,可以使用由元组组成的列表或者值是列表的字典:
1
2
3
4
|
>>> payload_tuples
=
[(
'key1'
,
'value1'
), (
'key1'
,
'value2'
)]
>>> r1
=
requests.post(
'https://httpbin.org/post'
, data
=
payload_tuples)
>>> payload_dict
=
{
'key1'
: [
'value1'
,
'value2'
]}
>>> r2
=
requests.post(
'https://httpbin.org/post'
, data
=
payload_dict)
|
发送非form-encoded数据 。
如果传递的是字符串而非字典,将直接发送该数据:
1
2
3
4
|
>>>
import
json
>>> url
=
'https://api.github.com/some/endpoint'
>>> payload
=
{
'some'
:
'data'
}
>>> r
=
requests.post(url, data
=
json.dumps(payload))
|
或者可以使用json参数自动对字典对象编码:
1
2
3
|
>>> url
=
'https://api.github.com/some/endpoint'
>>> payload
=
{
'some'
:
'data'
}
>>> r
=
requests.post(url, json
=
payload)
|
a) 如果在请求中使用了data或files参数,json参数会被忽略。b) 在请求中使用json参数会改变Content-Type的值为application/json 。
POST一个多部分编码(Multipart-Encoded)的文件 。
上传文件:
1
2
3
|
>>> url
=
'https://httpbin.org/post'
>>> files
=
{
'file'
:
open
(
'report.xls'
,
'rb'
)}
>>> r
=
requests.post(url, files
=
files)
|
显式地设置文件名,内容类型(Content-Type)以及请求头:
1
2
3
|
>>> url
=
'https://httpbin.org/post'
>>> files
=
{
'file'
: (
'report.xls'
,
open
(
'report.xls'
,
'rb'
),
'application/vnd.ms-excel'
, {
'Expires'
:
'0'
})}
>>> r
=
requests.post(url, files
=
files)
|
甚至可以发送作为文件接收的字符串:
1
2
3
|
>>> url
=
'http://httpbin.org/post'
>>> files
=
{
'file'
: (
'report.csv'
,
'some,data,to,send\nanother,row,to,send\n'
)}
>>> r
=
requests.post(url, files
=
files)
|
如果发送的文件过大,建议使用第三方包requests-toolbelt做成数据流.
强烈建议以二进制模式打开文件,因为Requests可能以文件中的字节长度来设置Content-Length 。
响应状态码 。
Response对象的status_code属性可以获取响应状态:
1
2
3
|
>>> r
=
requests.get(
'https://httpbin.org/get'
)
>>> r.status_code
200
|
requests库还内置了状态码以供参考:
1
2
|
>>> r.status_code
=
=
requests.codes.ok
True
|
如果请求异常(状态码为4XX的客户端错误或5XX的服务端错误),可以调用raise_for_status()方法抛出异常:
1
2
3
4
5
6
7
8
|
>>> bad_r
=
requests.get(
'https://httpbin.org/status/404'
)
>>> bad_r.status_code
404
>>> bad_r.raise_for_status()
Traceback (most recent call last):
File
"requests/models.py"
, line
832
,
in
raise_for_status
raise
http_error
requests.exceptions.HTTPError:
404
Client Error
|
响应头 。
Response对象的headers属性可以获取响应头,它是一个字典对象,键不区分大小写:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
>>> r.headers
{
'content-encoding'
:
'gzip'
,
'transfer-encoding'
:
'chunked'
,
'connection'
:
'close'
,
'server'
:
'nginx/1.0.4'
,
'x-runtime'
:
'148ms'
,
'etag'
:
'"e1ca502697e5c9317743dc078f67693f"'
,
'content-type'
:
'application/json'
}
>>> r.headers[
'Content-Type'
]
'application/json'
>>> r.headers.get(
'content-type'
)
'application/json'
|
Cookies 。
Response对象的cookies属性可以获取响应中的cookie信息:
1
2
3
4
|
>>> url
=
'http://example.com/some/cookie/setting/url'
>>> r
=
requests.get(url)
>>> r.cookies[
'example_cookie_name'
]
'example_cookie_value'
|
使用cookies参数可以发送cookie信息:
1
2
3
|
>>> url
=
'https://httpbin.org/cookies'
>>> cookies
=
dict
(cookies_are
=
'working'
)
>>> r
=
requests.get(url, cookies
=
cookies)
|
Response.cookies返回的是一个RequestsCookieJar对象,跟字典类似但提供了额外的接口,适合多域名或多路径下使用,也可以在请求中传递:
1
2
3
4
5
6
7
|
>>> jar
=
requests.cookies.RequestsCookieJar()
>>> jar.
set
(
'tasty_cookie'
,
'yum'
, domain
=
'httpbin.org'
, path
=
'/cookies'
)
>>> jar.
set
(
'gross_cookie'
,
'blech'
, domain
=
'httpbin.org'
, path
=
'/elsewhere'
)
>>> url
=
'https://httpbin.org/cookies'
>>> r
=
requests.get(url, cookies
=
jar)
>>> r.text
'{"cookies": {"tasty_cookie": "yum"}}'
|
重定向及请求历史 。
requests默认对除HEAD外的所有请求执行地址重定向。Response.history属性可以追踪重定向历史,它返回一个list,包含为了完成请求创建的所有Response对象并由老到新排序.
下面是一个HTTP重定向HTTPS的用例:
1
2
3
4
5
6
7
|
>>> r
=
requests.get(
'http://github.com/'
)
>>> r.url
'https://github.com/'
>>> r.status_code
200
>>> r.history
[<Response [
301
]>]
|
使用allow_redirects参数可以禁用重定向:
1
2
3
4
5
|
>>> r
=
requests.get(
'http://github.com/'
, allow_redirects
=
False
)
>>> r.status_code
301
>>> r.history
[]
|
如果使用的是HEAD请求,也可以使用allow_redirects参数允许重定向:
1
2
3
4
5
|
>>> r
=
requests.head(
'http://github.com/'
, allow_redirects
=
True
)
>>> r.url
'https://github.com/'
>>> r.history
[<Response [
301
]>]
|
请求超时 。
使用timeout参数设置服务器返回响应的最大等待时间:
1
2
3
4
|
>>> requests.get(
'https://github.com/'
, timeout
=
0.001
)
Traceback (most recent call last):
File
"<stdin>"
, line
1
,
in
<module>
requests.exceptions.Timeout: HTTPConnectionPool(host
=
'github.com'
, port
=
80
): Request timed out. (timeout
=
0.001
)
|
错误及异常 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:https://segmentfault.com/a/1190000018374275 。
最后此篇关于python三方库之requests的快速上手的文章就讲到这里了,如果你想了解更多关于python三方库之requests的快速上手的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
如何更改循环中变量的名称?比如 number1 、 number2 、 number3 、 number4 ? var array = [2,4,6,8] func ap ( number1: Int
我想设置 View 的背景颜色并在一定延迟后将其更改为另一种颜色。这是我的尝试方式: print("setting color 1") self.view.backgroundColor = UICo
我在使用 express-session 时遇到问题。 session 数据不会在请求之间持续存在。 正如您在下面的代码中看到的那样,/join 路由设置了一些 session 属性,但是当 /sur
我试图从叶渲染器获得一个非常简单的结果,用于快速 Steam 的 for 循环。 我正在上传叶文件 HTML,因为它不接受此处格式正确的代码 - 下面的pizza.swift代码- import
你们中有人有什么好的链接可以与我分享吗?我正在寻找一个 FAST 程序员编辑器,它可以非常快速地打开包含超过 100, 000 行代码的文件?我目前正在使用记事本自动取款机,打开一个 29000 行长
我现在正在处理眼动追踪数据,因此拥有一个巨大的数据集(想想数百万行),因此希望有一种快速的方法来完成此任务。这是它的简化版本。 数据告诉您眼睛在每个时间点正在查看的位置以及我们正在查看的每个文件。 X
我是新手,想为计时器或其他设备选择提示音。 如何打开此列表,以选择其中一种声音? Alert sound list 最佳答案 您将无法在应用中使用系统声音。 但是,您可以包括自己的声音文件,并将其显示
我编写了以下代码来构建具有顺序字符串的数组。 它的工作方式与我预期的一样,但我希望它能更快地运行。有没有更有效的方法在PowerShell中产生我想要的结果? 我是PowerShell的新手,非常感谢
我有一个包含一些非唯一行的矩阵,例如: x 尝试 y <- rle(apply(x, 1, paste, collapse = " ")) # y$lengths is the vector con
我的函数“keyboardWillShown”有问题。所以我想要的是菜单打开时,菜单正好出现在键盘上方。它可以在Iphone 8 plus,8、7、6上完美运行。但是,当我在模拟器上运行Iphone
我正在尝试通过Swift 5中的HTTP get方法从API提取数据。它在启动时成功加载了数据,但是当我刷新页面时,它说“索引超出范围”,这是因为数据是不再会在我的日志中读取,因此索引中没有任何内容。
我想做什么: 从我的数据库中获取时间戳并将其转换为用户的时区。 我的代码: let tryItNow = "\(model.timestampName)" let format = D
给定字体名称和字体大小,如何查找字符串的宽度(CGFloat)? (目标是将UIView的宽度设置为足以容纳字符串的宽度。) 我有两个字符串:一个重复“1”,重复36次,另一个重复“M”,重复36次。
我正在尝试解析此JSON ["Items": ( { AccountBalance = 0; AlphabetType = 3; Description = "\U0631\U
我在UINavigationBar内放置了一个UILabel。 我想根据navigationBar的高度增加该标签的字体大小。当navigationBar很大时,我希望字体大小更大;当滚动并缩小nav
我想将用户输入限制为仅有效数字并使用以下内容: func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, rep
目前我有一个包含超过 100.000 张图像的数据库,它们大小不一或类似,但我想为我的公司制作以下内容: 我插入/上传一张图片,系统返回最有可能相同的图片。我不知道使用什么算法,但它需要快速。我可以预
在我的 swift 项目中,我有一个按钮,我想在标签上打印按下该按钮的时间。 如何解决这个问题? 最佳答案 添加到DHEERAJ的答案中,您只需在func press(sender: UIButton
我必须发表评论,尝试在解析中导入数组。然而,有一个问题。 当我尝试从 Parse 加载数组时,我的输出是 ("Blah","Blah","Blah")这是一个元组...而不是一个数组 TT... 如何
我的应用程序有一个名为 MyDevice 的类,我用它来与硬件通信。该硬件是可选的,实例变量也是可选的: var theDevice:MyDevice = nil 然后,在应用程序中,我必须初始化设备
我是一名优秀的程序员,十分优秀!