requests payload_Requests库(一)

663d9b35075b0ab4fb1254dee90782ee.png

        Requests是Python HTTP 库。在我这里认为,它是最优秀的第三方的HTTP库,使用范围广,通常用于接口测试、爬虫、web后台服务调用外部服务等。

    Requests 完全满足今日 web 的需求。

            Keep-Alive & 连接池

            国际化域名和 URL

            带持久 Cookie 的会话

            浏览器式的 SSL 认证

            自动内容解码

            基本/摘要式的身份认证

            优雅的 key/value Cookie

            自动解压

            Unicode 响应体

            HTTP(S) 代理支持

            文件分块上传

            流下载

            连接超时

            分块请求

            支持 .netrc

这么优秀的http库,如何安装使用呢

pip install requests

如何获取源码呢,可以通过如下的方式获取

git clone git://github.com/kennethreitz/requests.git

发送请求

    使用 Requests 发送网络请求非常简单。

    一开始要导入 Requests 模块:

import requests

然后,尝试获取某个网页。本例子中,我们如何通过requests来获取GET的网络请求呢,看下下面的例子:

r = requests.get('https://api.leizi.com/events')

现在,我们有一个名为 r 的 Response 对象。我们可以从这个对象中获取所有我们想要的信息。

Requests 简便的 API 意味着所有 HTTP 请求类型都是显而易见的。例如,你可以这样发送一个 HTTP POST 请求:

r = requests.post('http://api.leizi.com/post', data = {'key':'value'})

漂亮,对吧?那么其他 HTTP 请求类型:PUT,DELETE,HEAD 以及 OPTIONS 又是如何的呢?都是一样的简单:

r = requests.put('http://api.leizi.com/put', data = {'key':'value'})r = requests.delete('http://api.leizi.com/delete')r = requests.head('http://api.leizi.com/get')r = requests.options('http://api.leizi.com/get')

都很不错吧。其实 requests进行网络请求很简单的。那么我们看看如何带参数呢?

    传递 URL 参数

        你也许经常想为 URL 的查询字符串(query string)传递某种数据。如果你是手工构建 URL,那么数据会以键/值对的形式置于 URL 中,跟在一个问号的后面。例如, httpbin.org/get?key=val。Requests 允许你使用 params 关键字参数,以一个字符串字典来提供这些参数。举例来说,如果你想传递 key1=value1 和 key2=value2 到 httpbin.org/get ,那么你可以使用如下代码:

payload = {'key1': 'value1', 'key2': 'value2'}r = requests.get("http://httpbin.org/get", params=payload)

通过打印输出该 URL,你能看到 URL 已被正确编码:

print(r.url)http://leizi.org/get?key2=value2&key1=value1

注意字典里值为 None 的键都不会被添加到 URL 的查询字符串里。

你还可以将一个列表作为值传入:

>>> payload = {'key1': 'value1', 'key2': ['value2', 'value3']}>>> r = requests.get('http://leizi.org/get', params=payload)>>> print(r.url)http://leizi.org/get?key1=value1&key2=value2&key2=value3

        reuqests库带参数还是很简单的。

响应内容

我们能读取服务器响应的内容。我们可以找一个请求:

>>> import requests>>> r = requests.get('https://api.github.com/events')>>> r.textu'[{"repository":{"open_issues":0,"url":"https://github.com/...

Requests 会自动解码来自服务器的内容。大多数 unicode 字符集都能被解码。

请求发出后,Requests 会基于 HTTP 头部对响应的编码作出有根据的推测。当你访问 r.text 之时,Requests 会使用其推测的文本编码。你可以找出 Requests 使用了什么编码,并且能够使用 r.encoding 属性来改变它:

>>> r.encoding'utf-8'>>> r.encoding = 'ISO-8859-1'

如果你改变了编码,每当你访问 r.text ,Request 都将会使用 r.encoding 的新值。你可能希望在使用特殊逻辑计算出文本的编码的情况下来修改编码。比如 HTTP 和 XML 自身可以指定编码。这样的话,你应该使用 r.content 来找到编码,然后设置 r.encoding 为相应的编码。这样就能使用正确的编码解析 r.text 了。

二进制响应内容

你也能以字节的方式访问请求响应体,对于非文本请求:

>>> r.contentb'[{"repository":{"open_issues":0,"url":"https://github.com/...

Requests 会自动为你解码 gzip 和 deflate 传输编码的响应数据。

例如,以请求返回的二进制数据创建一张图片,你可以使用如下代码:

>>> from PIL import Image>>> from io import BytesIO>>> i = Image.open(BytesIO(r.content))

                          如果感觉文章有用,请点亮在看。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值