Python之Requests库使用总结

概述
Requests是python中一个很Pythonic的HTTP库,用于构建HTTP请求与解析响应

Requests开发哲学

Beautiful is better than ugly.(美丽优于丑陋)
Explicit is better than implicit.(直白优于含蓄)
Simple is better than complex.(简单优于复杂)
Complex is better than complicated.(复杂优于繁琐)
Readability counts.(可读性很重要)
安装
直接安装

pip install requests

简单上手

导入模块

import requests

发送请求

#get
r = requests.get('http://httpbin.org/get')
 
#post
r = requests.post('http://httpbin.org/post', data = {'key':'value'})

通过requests.get或post方法实际发出一个http请求,返回一个response对象,http://httpbin.org是一个可以测试http请求的网站

处理响应

r.text  #返回响应内容主体,Requests 会自动解码来自服务器的内容
 
r.content  #返回二进制的响应内容主体
 
r.json() #处理json的响应内容,返回解码后的dict

构造请求

Requests中requests.get或post这些方法实际都是通过requests.request(method, url, **kwargs)实现的,主要返回response对象,下面主要介绍这个方法的参数

method -- Request对象的请求方法.
url -- 请求的URL.
params -- (可选) 请求的URL查询字符串中要发送的字典或字节.
data -- (可选) 字典或者元组列表[(key, value)] (form-encoded), 字节, 或者文件对象包含在请求主体中发生,主要是post put使用.
json -- (可选) 包含请求主体中的json数据.
headers -- (可选) HTTP首部(请求/通用/实体首部),字典形式.
cookies -- (可选) Dict 或者 CookieJar对象包含在首部cookie字段发送.
files -- (可选) “名称”:类文件对象(或{“名称:file-tuple}”)的字典,用于分段编码上传。 file-tuple可以是2元组(“ filename”,fileobj),3元组(“ filename”,fileobj,“ content_type”)或4元组(“ filename”,fileobj,“ content_type”,custom_headers), 其中,“ content-type”是一个字符串,用于定义给定文件的内容类型,而custom_headers是一个类似dict的对象,其中包含要为该文件添加的其他标题。
auth -- (可选)  用于Basic/Digest/Custom HTTP 认证,元组类型.
timeout (float or tuple) -- (可选)超时时间,在放弃请求之前,等待服务器发送数据的秒数,以浮点数或(连接超时,读取超时)元组为单位.
allow_redirects (bool) -- (可选)布尔值。 启用/禁用GET / OPTIONS / POST / PUT / PATCH / DELETE / HEAD重定向。 默认为True。
proxies -- (可选)字典,代理设置
verify -- (可选)布尔值(在这种情况下,它控制我们是否验证服务器的TLS证书)或字符串(在这种情况下,它必须是要使用的CA捆绑包的路径)。 默认为True。
stream -- (可选) 如果为False,则将立即下载响应内容。
cert -- (可选) 如果为String,则为ssl客户端证书文件(.pem)的路径。 如果是元组,则(“证书”,“密钥”)配对。

GET请求 

requests.get(url, params=None, **kwargs)等价于requests.request('get', url, params=None,**kwargs),**kwargs即上面支持的可选参数

payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://httpbin.org/get", params=payload)
 
#即向http://httpbin.org/get?key2=value2&key1=value1请求

POST请求
requests.post(url, data=None, json=None, **kwargs)等价于requests.request('post', url, data=None, json=None, **kwargs),**kwargs即上面支持的可选参数

POST提交请求,数据一般是放在HTTP报文主体中,数据编码主要有以下三种方式并在请求首部Content-Type 中指定

application/x-www-form-urlencoded :最常见post提交数据的方式,以form表单形式提交数据。
application/json :以json串提交数据。
multipart/form-data :一般使用来上传文件。

#application/x-www-form-urlencoded,一般form提交
 
payload = {'key1': 'value1', 'key2': 'value2'}
 
r = requests.post("http://httpbin.org/post", data=payload)
 
#application/json,如果使用 json 参数直接传递dict,就会被自动编码等同于json.dumps(payload)。如果使用data参数传递json.dumps(payload),与json参数不同在于前者有Content-Type,后者无
 
payload = {'key1': 'value1', 'key2': 'value2'}
 
r = requests.post("http://httpbin.org/post", json=payload)
 
#multipart/form-data 传文件
 
url = 'http://httpbin.org/post'
 
files = {'file': open('report.xls', 'rb')}
 
r = requests.post(url, files=files)

定制请求头

如果想为请求添加 HTTP 头部,只要简单地传递一个 dict 给 headers 参数就可以了

headers = {'user-agent': 'my-app/0.0.1'}
 
r = requests.get('http://httpbin.org/get', headers=headers)

注意的是如果headers中包含Cookie会覆盖使用cookies参数时传入的dict

传入Cookie

直接将字典类型的cookies传入到cookies参数即可

cookies = dict(cookies_are='working')
 
r = requests.get('http://httpbin.org/get',cookies=cookies)

处理响应

requests方法返回一个response对象

响应内容主体

r = requests.get('http://httpbin.org/get')
 
r.text  #返回响应内容主体,Requests 会自动解码来自服务器的内容
 
r.content  #返回二进制的响应内容主体
 
r.json() #处理json的响应内容,返回解码后的dict

注意:有的中文网站使用r.text时,返回的内容为乱码,实际是自动解码错误了,解决办法主要有

#先返回二进制内容,再根据实际的编码解码
 
r.content.decode("utf-8")
 
#不知道具体编码形式时,可以使用下面方法自动解码
 
r.encoding = r.apparent_encoding
 
r.text

获取响应头部

1.响应头部信息

r.headers

2.获取此响应的原始请求的头部

r.request.headers

响应状态

1.返回状态码

r.status_code

2.响应是400或500类就抛出HTTPError异常

r.raise_for_status()

3返回状态原因

r.reason

 响应内容编码

r.encoding     #从HTTP报文header中猜测的响应内容的编码方式
 
r.apparent_encoding  #从内容中分析响应内容的编码方式(备选编码方式,一般从html<meta>标签中属性charset获取)

需要注意的是

r.encoding:如果header中不存在charset,则认为编码是ISO-8859-1
r.text根据r.encoding显示网页内容
r.apparent_encoding:根据网页内容分析处的编码方式可以看做是r.encoding的备选
其它方法与属性
response对象其它的方法与属性参考,具体可以查看官网地址http://cn.python-requests.org/zh_CN/latest/api.html#requests.Response

apparent_encoding:由html chardet属性表示的编码
close():关闭连接,一般不用
content:二进制内容主体
cookies:返回CookieJar对象
elapsed:从发送请求到响应到达之间经过的时间
encoding:决定.text的编码,从头部获取
headers:响应的头部信息,以字典形式
history:是一个 Response 对象的列表,为了完成请求而创建了这些对象。这个对象列表按照从最老到最近的请求进行排序。主要用在重定向中
is_permanent_redirect:如果此响应是重定向的永久版本之一,则为True。
is_redirect:如果此响应是自动处理后格式正确的HTTP重定向,则为true
links:返回响应的已解析头链接(如果有)。
ok:如果status_code小于400,则返回True。
request:这个响应的原始request对象
url:响应的最终URL
会话对象
有时候可能需要多个请求才能完成任务的情况,比如模拟登录后的请求操作,如果单独用requests去请求的话,就需要将最初的请求响应的cookie或header保存下来并且在后面的请求中都加入,这样比较麻烦。

所以requests提供了个Session对象,用来让你能够跨请求保持某些参数,它也会在同一个 Session 实例发出的所有请求之间保持 cookie,并且向同一主机发送多个请求,底层的 TCP 连接将会被重用,从而带来显著的性能提升。

1.跨请求保持一些 cookie

s = requests.Session()
 
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
r = s.get("http://httpbin.org/cookies")
 
print(r.text)
# '{"cookies": {"sessioncookie": "123456789"}}'

2.属性的合并

s = requests.Session()
s.auth = ('user', 'pass')
s.headers.update({'x-test': 'true'})
 
# both 'x-test' and 'x-test2' are sent
s.get('http://httpbin.org/headers', headers={'x-test2': 'true'})

注意的是,只有对象属性才能合并,方法层的参数覆盖则会覆盖

s = requests.Session()
 
r = s.get('http://httpbin.org/cookies', cookies={'from-my': 'browser'})
print(r.text)
# '{"cookies": {"from-my": "browser"}}'
 
r = s.get('http://httpbin.org/cookies')
print(r.text)
# '{"cookies": {}}'

3.前后文管理器

with requests.Session() as s:
    s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')

这样就能确保with区块退出后会话能被关闭,即使发生了异常也一样

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

  • 27
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在Python中安装requests,可以按照以下步骤进行操作: 1. 打开终端或命令提示符窗口,输入以下命令安装pip: ```python python -m ensurepip --default-pip ``` 2. 输入以下命令升级pip: ```python python -m pip install --upgrade pip ``` 3. 输入以下命令安装requests: ```python pip install requests ``` 安装完成后,可以通过以下代码验证requests是否安装成功: ```python import requests response = requests.get("https://www.baidu.com") print(response.text) ``` ### 回答2: 在Python中安装requests非常简单。首先,确保已经安装了Python解释器,只要在官方网站下载并安装即可。 一旦安装了Python,就可以使用Python的包管理工具pip来安装requests。打开命令行窗口(在Windows系统上是运行cmd命令),输入以下命令来安装requests: ``` pip install requests ``` 这将会自动从Python包索引中下载并安装requests。建议使用最新版本的requests以确保拥有最新的功能和安全性。 安装完成后,可以在Python程序中使用requests。只需在代码中导入requests模块,即可调用其中提供的各种功能来发送HTTP请求。 下面是一个简单的示例代码,演示如何使用requests发送GET请求并获取响应: ```python import requests response = requests.get('https://www.example.com') print(response.text) ``` 此代码将发送一个GET请求到https://www.example.com,并将返回的响应内容打印出来。 通过使用requests,可以轻松地发送HTTP请求、处理响应、处理Cookie和会话等。requests提供了许多方便的方法和功能,可以让Python与Web服务进行交互变得更加容易和高效。 ### 回答3: 要安装Pythonrequests,可以按照以下步骤进行操作: 1. 打开Python的官方网站(https://www.python.org/downloads/),选择适合你系统的Python版本进行下载。根据你的操作系统,选择32位或64位的安装包。 2. 运行下载的安装包,按照提示进行安装。在安装过程中,请确保勾选上“Add Python to PATH”选项,这样可以在命令行中直接使用Python。 3. 安装完成后,打开命令提示符或者终端窗口,输入以下命令检查Python是否安装成功: ``` python --version ``` 4. 确保Python安装成功后,可以使用以下命令安装requests: ``` pip install requests ``` 5. 执行上述命令后,pip将会自动从Python Package Index(PyPI)下载并安装requests及其相关依赖。安装完成后,可以使用import语句在Python脚本中引入requests。 6. 验证安装是否成功,可以在Python交互式环境中执行以下命令: ``` import requests ``` 如果没有报错,表示安装成功。 总结: 通过以上步骤,你已经成功安装了Pythonrequests。现在你可以在Python项目中使用requests发送HTTP请求、处理响应等功能了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值