前言
学习request的使用,在用之前,用官方文档提供的接口:https://api.github.com/events;
ctrl+鼠标左键可以进入被调用函数源码,可以看到第一个参数URL是必须参数,params是选填,**kwargs是关键字参数。
def get(url, params=None, **kwargs):
r"""Sends a GET request.
:param url: URL for the new :class:`Request` object.
:param params: (optional) Dictionary, list of tuples or bytes to send
in the query string for the :class:`Request`.
:param \*\*kwargs: Optional arguments that ``request`` takes.
:return: :class:`Response <Response>` object
:rtype: requests.Response
"""
return request("get", url, params=params, **kwargs)
输入代码,运行,报错:ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the ‘ssl’ module is compiled with ‘OpenSSL 1.1.0h 27 Mar 2018’. See: https://github.com/urllib3/urllib3/issues/2168
原因:
因为你正在尝试使用的 urllib3 版本(2.0+)需要依赖的 OpenSSL 版本至少为 1.1.1,但是你当前的环境中 OpenSSL 的版本是 1.1.0h,比所需的版本低
解决方法:
1、更新你的 OpenSSL 版本:你可以尝试更新你的环境中的 OpenSSL 版本到 1.1.1 或者更高。但我发现,在某些系统中,你可能需要编译和安装 OpenSSL,老是报错需要进一步解决该问题带来的其他问题,所以推荐方案二。
2、降级你的 urllib3 版本:如果更新 OpenSSL 不方便,你也可以考虑降级你的 urllib3 版本到一个与你当前 OpenSSL 版本兼容的版本。你可以用以下的命令来降级 urllib3:pip install 'urllib3<2.0'
import requests
r=requests.get("https://api.github.com/events")
print(r.json())#接口的返回json
print(r.status_code)#接口状态返回码
print(r.text)#接口返回的文本
运行结果:这是运行成功的
一、requests模块进行get请求带参数(两种方法)
法一:
import requests
params={
"shouji":"13456755448",
"appkey":"e1d1e3c8fb254b33"
}
r=requests.get(url="https://api.binstd.com/shouji/query",params=params)
print(r.status_code)
print(r.json())
法二:
import requests
r=requests.get(url="https://api.binstd.com/shouji/query",params={
"shouji":"13456755448",
"appkey":"e1d1e3c8fb254b33"
})
print(r.status_code)
print(r.json())
二、requests模块进行post请求(三种传参方式)
没有专门传参模块,需要通过kwargs关键字去传。**
法1
import requests
params={
"shouji": "13456755448",
"appkey": "e1d1e3c8fb254b33"
}
r=requests.post(url="https://api.binstd.com/shouji/query",params=params)
print(r.status_code)
print(r.json())
法2
一般工作中post接口请求多用body里面的json去传
其实不管是params去传还是json去传,它里面的参数值其实都是一个字典。
import requests
json_data={
"title":"foo",
"body":"bar",
"userId":1
}
r=requests.post(url="https://api.binstd.com/shouji/query",json=json_data)
print(r.status_code)
print(r.json())
法3
import requests
form_data={
"text":"hello",
}
r=requests.post(url="https://dict.youdao.com/keyword/key",data=form_data)
print(r.status_code)
print(r.json())
三、灵魂之问
如果拿到一个接口,我想在POSTMAN里面去先进行一个调试,那么params、data、json三种方式该怎么去选?
**答:**可以手动尝试,无非就这三种方式,总能试出来的。这是一种方式,也可以去看一下背后的原理,可以去看一下一个接口的定义,该定义由后端开发去做,他在做的时候就设置好了请求方式以及接口参数传递的方式,看一下源码就好。开发会有业界的规范,比如get请求就用params去传,post请求就用data或json(一般现在大多数都用json)