requests HTTP客户端

requests是Python中的一个HTTP客户端库,原本python内置了urlliburllib2urllib3也能完成同样的功能,但API设计的都不是很好用,request则是一个相当简单易用的库,经常用于爬虫、HTTP接口调用等场景。下面主要以例子的形式介绍requests库的用法。

安装requests库

我们直接使用pip安装即可。

pip3 install requests

发送请求和接受响应

下面我们以一系列例子的形式介绍如何使用requests库。

请求网页

下面是发送GET请求HTML网页例子。

import requests

params = {'wd': '美女'}

r = requests.get("http://www.baidu.com/s", params=params)
r.encoding = "utf-8"
print(r.text)
  • requests.get()会发起GET请求,返回值是一个响应(response)对象,params为URL参数,是一个字典类型
  • r.encoding可以更改读取返回值时使用的文本编码
  • r.text读取响应的文本内容,这里为HTML格式的文本,读取后我们可以使用其它库进行进一步的解析

同理,HTTP的POST,DELETE,PUT等请求方法的编写也是类似的。

请求图片

图片等都属于二进制数据,下面例子我们请求了图片。

r = requests.get("https://www.baidu.com/img/bd_logo1.png")

fp = open("test.png", "wb")
fp.write(r.content)
fp.close()

代码中,我们请求了一个图片并保存到文件。

请求JSON数据

请求JSON数据通常用于HTTP接口调用。

r = requests.get("http://www.weather.com.cn/data/sk/101010100.html")
r.encoding="utf-8"
print(r.json())

上面例子查询了一个天气接口,我们直接以JSON形式读取了响应。

提交表单

我们使用data关键字参数进行表单数据的组织。

data = {"key1":"value1", "key2":"value2"}
r = requests.post(url, data=data)

提交JSON字符串

直接使用json关键字参数就好了。字典会自动转换成json字符串。

data = {"key1":"value1", "key2":"value2"}
r = requests.post(url, json=data)

上传二进制文件

上传文件使用files关键字参数,但这里要注意,一定要以二进制形式打开文件。

fp = open("test.png", "rb")
files = {"file": fp}
r = requests.post(url, files=files)

读取响应码

r = requests.get("https://www.baidu.com")
print(r.status_code)

r.status_code是响应对象的响应码。

设置和读取Cookie

请求时如果使用Cookie,只需设置下cookies关键字参数,它是一个字典类型。

cookies = {"username": "test"}
r = requests.get(url, cookies=cookies)

此外,用r.cookies可以读取服务器设置的cookie,也是一个字典类型。

设置和读取HTTP Header

有些服务器会主动判断User-Agent,根据终端设备的不同返回不同的内容,我们可以使用headers关键字参数定制请求头。

headers = {"user-agent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:53.0) Gecko/20100101 Firefox/53.0"}
r = requests.get("http://www.baidu.com", headers=headers)

当然不止User-Agent,HTTP请求头中具有的参数都可以传。

读取响应头可以使用r.headers

设置请求超时

  • 设置timeout关键字参数可以设置超时时间,单位是秒。

关于重定向

除了HEAD请求,Request会自动处理重定向。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap