python使用requests模块请求http接口

Python requests 模块

Python requests 是一个常用的 HTTP 请求库,可以方便地向网站发送 HTTP 请求,并获取响应结果。requests 模块比 urllib 模块更简洁。使用 requests 发送 HTTP 请求需要先导入 requests 模块,导入后就可以使用 requests 提供的方法向指定 URL 发送 HTTP 请求。

requests常用参数及响应内容

  1. requests常用参数
参数说明
method请求方式: get、post、put、delete 等
url接口请求地址
params请求数据中的链接参数,例如 get 的请求参数都是在 url 地址中
data请求数据
json接口常见的数据请求格式
headers请求头信息
cookie保存的用户登录信息,比如做一些充值功能,但是需要用户已经登录,需要 cookie 信息的请求信息传输
file接口中需上传的文件
timeout超时处理 proxys 设置代理
stream文件下载功能,通过请求方式下载文件
  1. requests响应内容
参数说明
r.encoding获取当前的编码
r.text返回响应的内容,unicode 类型数据
r.cookies返回cookie
r.status_code返回 http 的状态码,比如 404 和 200(200 是 OK,404 是 Not Found)
r.headers接口常见的数据请求格式
headers以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
r.json()返回结果的 JSON 对象 (结果需要以 JSON 格式编写的,否则会引发错误)
r.content返回响应的内容,以字节为单位

安装及导入requests模块

# 安装 requests 模块
# pip install requests
# 导入 requests 包
import requests

HTTP 请求方法

方法描述
GET请求指定的页面信息,并返回实体主体
POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改
PUT从客户端向服务器传送的数据取代指定的文档的内容
DELETE请求服务器删除指定的页面
HEAD类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
CONNECTHTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器
OPTIONS允许客户端查看服务器的性能
TRACE回复服务器收到的请求,主要用于测试或诊断
PATCH对 PUT 方法的补充,用来对已知资源进行局部更新

GET 请求

requests.get(url, params=None, **kwargs)

url: 获取页面的url链接
params: url中的额外参数,字典或字节流格式,可选
kwargs: 可选参数

url格式:http://ip:port/test?key1=value1&key2=value2
接口与参数之间用?链接,参数用key=value的形式表示,多个参数用&符号链接
传参数用字典类型:params={key1: value1, key2: value2}

: 如果GET请求参数中包含汉字,常会遇到编码错误
主要原因:http协议对URL参数的编码要求是ASCII字符集,汉字是UTF-8。在发送时要进行两次编码才能将汉字转为ASCII字节码,接收方同样也要进行两次解码,才能正确地还原汉字。
解决方法:python 内置库 urllib 提供了相应命令,可以将汉字转为ASCII编码。
编码: urllib.parse.urlencode(dic)
解码: urllib.parse.unquote(str)

get方法示例

import requests

url = "http://192.168.1.30::3333/demo/"
dic = {'key': keyword }
headers = {'Authorization': 'Bearer 111'}
param = urllib.parse.urlencode(dic)    #包含汉字
response = requests.get(url, params=param, headers=headers)

print(response.text)    	# 响应内容的文本格式:response.text
print(response.content)    	# 响应内容的二进制格式: response.content
print(response.json())    	# 如果响应内容是json格式,可以用response.json()方法转换成 dict类型

POST 请求

POST 请求与GET请求不同的是, POST 请求参数是放在 request body 里发送的。

import requests
import json

url = "http://192.168.1.30::3333/demo/"

# from-data形式1
payload = {'key1': 'value1',
'key2': 'value2'}
files=[
  ('image',('111.jpg',open('/D:/111.jpg','rb'),'image/jpeg'))
]
headers = {}
response = requests.post(url, headers=headers, data=payload, files=files)

# from-data形式2
payload = {"key1": (None, 'value1'), "key2": (None, 'value2'), "Image": ('111.jpg', open('/D:/111.jpg', "rb"), "image/jpeg")}
headers = {}
response = requests.post(url, headers=headers, files=payload)

# x-www-form-urlencoded形式1 简单键值对参数
payload = 'key1=value1&key2=value2'
headers = {
  'Content-Type': 'application/x-www-form-urlencoded'
}
response = requests.post(url, headers=headers, data=payload)

# x-www-form-urlencoded形式2 复合值参数
dic = {"key1": 'value1', "key2": 'value2'}
data = {"params": json.dumps(dic)}
headers = {
  'Content-Type': 'application/x-www-form-urlencoded'
}
response = requests.post(url, headers=headers, data=data)

# json形式1
data={"key1": 'value1', "key2": 'value2'}
response = requests.post(url, json=data)

# json形式2
header={'content-type':'application/json'}
data={"key1": 'value1', "key2": 'value2'}
response = requests.post(url, data=json.dumps(data))


print(response.text)

POST 请求还可以设置 cookie, header 等信息,具体可以参考postman操作方式。
其它请求消息, PUT与 POST类似, DELETE与GET类似。

content-type 参数说明

语法格式:type/subtype
type :数据资源的大类,如 text (文本类型), video(视频类型)等
subtype:资源子类,如,对于 text类,subtype 可能是 plain,csv 或者html等

参数说明
application/json传json数据
application/x-www-form-urlencoded提交表单默认的content-type设置, 对应form属性为 enctype
multipart/form-data用于 form 上传文件
text/csv传csv
text/html传网页
text/plain text/xml传文本
image/jpeg传图片
video/mp4传MP4视频

HTTP状态码

HTTP 状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型。响应分为五类:

分类描述
1**信息响应,服务器收到请求,需要请求者继续执行操作
2**成功响应,操作被成功接收并处理
3**重定向,需要进一步的操作以完成请求
4**客户端错误,请求包含语法错误或无法完成请求
5**服务器错误,服务器在处理请求的过程中发生了错误

状态码列表:

状态码描述
100继续。客户端应继续其请求
101切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议
102由WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行
200请求成功。一般用于GET与POST请求
201已创建。成功请求并创建了新的资源
202已接受。已经接受请求,但未处理完成
203非授权信息。请求成功,但返回的meta信息不在原始的服务器,而是一个副本
204无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
205重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
206部分内容。服务器成功处理了部分GET请求
208已经报告。一个DAV的绑定成员被前一个请求枚举,并且没有被再一次包括
226服务器已经满足了请求所要的资源,并且响应是一个或者多个实例操作应用于当前实例的结果
300多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
301永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
303查看其它地址。与301类似。使用GET和POST请求查看
304未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
305使用代理。所请求的资源必须通过代理访问
306已经被废弃的HTTP状态码
307临时重定向。与302类似。使用GET请求重定向
308永久转移。这个请求和以后的请求都应该被另一个URI地址重新发送。307、308和302、301有相同的表现,但是不允许HTTP方法改变。例如,请求表单到一个永久转移的资源将会继续顺利地执行
400错误请求。 服务器不理解请求的语法
401未授权。 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应
402该状态码是为了将来可能的需求而预留的
403禁止。 服务器拒绝请求
404未找到。 服务器找不到请求的网页
405方法禁用。 禁用请求中指定的方法
406不接受。无法使用请求的内容特性响应请求的网页
407需要代理授权。此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理
408请求超时。 服务器等候请求时发生超时
409冲突。 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息
410已删除。如果请求的资源已永久删除,服务器就会返回此响应
411需要有效长度。服务器不接受不含有效内容长度标头字段的请求
412未满足前提条件。服务器未满足请求者在请求中设置的其中一个前提条件
413请求实体过大。 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力
414请求的 URI 过长。请求的 URI(通常为网址)过长,服务器无法处理
415不支持的媒体类型。请求的格式不受请求页面的支持
416请求范围不符合要求。如果页面无法提供请求的范围,则服务器会返回此状态代码
417未满足期望值。服务器未满足"期望"请求标头字段的要求
500服务器内部错误。服务器遇到错误,无法完成请求
501尚未实施。服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码
502错误网关。服务器作为网关或代理,从上游服务器收到无效响应
503服务不可用。服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态
504网关超时。服务器作为网关或代理,但是没有及时从上游服务器收到请求
505HTTP 版本不受支持。服务器不支持请求中所用的 HTTP 协议版本

postman生成python请求代码

  1. 打开Postman软件,点击"+"号新建一个请求;
    在这里插入图片描述
  2. 选择对应请求方式,url 地址,请求参数,点击 “Send” 发送请求;
    在这里插入图片描述
  3. 在页面右侧找到</> code snippet 图标,点击进去;
    在这里插入图片描述
  4. 下滑选择"Python-Request",则会生成想要的示例代码。
    在这里插入图片描述
  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Pythonrequests模块是一个用于发送HTTP请求的第三方库,支持GET、POST、PUT、DELETE等多种请求方式,并提供了丰富的API来处理响应。使用方法如下: 1. 安装requests模块:`pip install requests` 2. 导入requests模块:`import requests` 3. 发送请求:`response = requests.get(URL)` 4. 获取响应内容:`response.text` 更多详细用法请参考官方文档:https://docs.python-requests.org/zh_CN/latest/ ### 回答2: Python中的Requests模块是一个方便又简单的HTTP请求库,用于向网站发送HTTP请求和获取网站响应。使用Requests模块,我们可以实现Get、Post、Put、Delete等多种HTTP请求方式,并且可以设置请求头部、传递请求参数及数据、设置代理、会话维持、SSL证书验证等一系列高级功能。 一、发送一个简单的请求 我们可以通过类似如下的代码来发送一个简单的HTTP请求: ``` import requests response = requests.get('http://www.baidu.com') print(response.text) # 打印响应内容 ``` 以上代码中,我们先导入requests模块,然后通过requests.get方法,传入百度的URL地址,发起一个GET请求。这条请求将会抓取百度的HTML页面,并且将获取到的内容打印在屏幕上。 二、请求头定制 当我们通过requests库发起一个请求时,默认会附带一些默认的请求头部信息,比如User-Agent、Accept-Encoding、Connection、Accept-Language等。但是在某些场景下,我们可能需要自定义请求头部信息。 我们可以通过设置headers参数来设置请求头部信息: ``` import requests headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'} response = requests.get('http://www.baidu.com', headers=headers) print(response.text) ``` 在以上代码中,我们通过定义一个headers变量,并设置User-Agent的信息以模拟浏览器发送的请求头部信息。这样,我们就可以通过Requests模块来设置请求头部,达到更好的伪装效果。 三、请求参数设置 有些HTTP请求,比如GET、DELETE等,需要在URL上携带查询参数,即查询字符串。我们可以通过传递params参数实现这个功能。 如下所示: ``` import requests params = {'key1': 'value1', 'key2': 'value2'} response = requests.get('http://www.baidu.com', params=params) print(response.url) # 打印请求URL ``` 在以上代码中,我们传递了一个名为params的字典作为请求参数,这样查询字符串的请求URL就会被构建出来。 四、请求数据携带 有些HTTP请求,比如POST、PUT等,需要在请求体中携带数据。requests模块提供了不同的函数来实现这个需求,主要有post、put等函数。 如下所示: ``` import requests payload = {'key1': 'value1', 'key2': 'value2'} response = requests.post('http://127.0.0.1:5000/', data=payload) print(response.text) ``` 在以上代码中,我们调用了requests.post函数来提交POST请求。其中,请求数据是以字典的形式传递的,通过参数data来指定。这样,我们就可以在HTTP请求中包含数据内容。 五、代理设置 有些场景下,我们需要使用代理服务器来访问网站,这时我们需要进行代理设置。 如下所示: ``` import requests proxies = { 'http': 'http://10.10.1.10:3128', 'https': 'http://10.10.1.10:1080', } response = requests.get('http://www.baidu.com', proxies=proxies) print(response.text) ``` 以上代码中,我们可以通过设置proxies参数来指定代理服务器的地址和端口号。这样,我们就可以使用代理来请求网站。 六、会话维持 有些场景下,我们需要依次发起多个HTTP请求,这些请求中需要使用同一个Session。比如在维持用户登录状态时使用。 如下所示: ``` import requests s = requests.Session() s.get('http://httpbin.org/cookies/set/sessioncookie/123456789') response = s.get('http://httpbin.org/cookies') print(response.text) ``` 以上代码中,我们通过调用requests.Session函数来创建一个Session对象。然后在Session对象中,使用get方法请求httpbin.org网站的cookies/set接口设置cookie,接着再调用get方法请求httpbin.org/cookies接口,这时候就会自动带上之前设置的cookie了。 七、SSL证书验证 有些HTTPS站点使用的是自签名证书,我们可以通过配置verify参数(默认响应True)来解决证书验证问题。 如下所示: ``` import requests response = requests.get('https://www.12306.cn', verify=False) print(response.text) ``` 在以上代码中,我们设置了verify参数为False。这样,在请求时,将会不进行SSL证书验证。当然,同样的,如果自己的服务器有合法的证书可以验证,也可以将这个参数设置为True,进行SSL证书的安全验证。 综上所述,requests模块是一个非常实用的Python库。它简单易学但又强大、灵活。通过requests模块可以非常方便地进行HTTP请求,并且可以设置请求头、请求参数、请求体等一系列内容,同时还可以进行会话维持、代理设置、SSL验证等高级功能。在实现爬虫、自动化程序、接口测试等方面,requests模块都是非常重要的工具。 ### 回答3: Python 是一门面向对象的编程语言,具有简洁易懂,语法简单,易于维护等优点,得到了广泛的使用requestsPython 中一个用于发送 HTTP/1.1 请求的第三方库,它没有类似于 urllib 中一般的复杂构造器,而是提供了更直观的接口,可以帮助我们更加方便快捷地发送 HTTP 请求requests 模块使用过程中常用的方法有 GET、POST、DELETE、PUT 等,常见的请求参数有 headers、params、data、json 等,在使用这些参数时需要注意其各自的用法和注意事项。 使用 requests 模块时需要进行如下步骤: 1.安装requests模块,可以通过pip命令快速安装,如:pip install requests。 2.导入requests模块,即:import requests。 3.使用requests模块提供的方法进行HTTP请求的发送和响应的处理,常见的方法有get、post、put、delete等。 例如,下面的代码展示了如何使用 requests 模块发送 GET 请求并获取响应: ``` import requests response = requests.get('http://example.com') print(response.status_code) # 打印响应状态码 print(response.text) # 打印响应内容 ``` 在进行 POST 请求的时候,我们需要像下面这样使用 data 参数将数据传递给服务器: ``` import requests data = {'username': 'example', 'password': 'example'} response = requests.post('http://example.com/login', data=data) print(response.status_code) # 打印响应状态码 print(response.text) # 打印响应内容 ``` 使用 requests 模块时需要注意一些常见的问题,如网络不稳定时的重试机制、使用 header 伪装自己的请求HTTP 代理设置等等。 总之,requests 模块Python 中一个非常强大、易用的 HTTP 请求库,能够帮助我们快速地构造并发送 HTTP 请求,处理 HTTP 响应,方便地进行网络爬取、数据获取等任务,是 Python 中不可或缺的一个模块

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值