python——requests库

劝君惜取少年时

requests库可以帮我们发送http的请求,并处理服务器给我们的响应

大体使用方法

发送请求

r = requests.get('https://www.baidu.com', timeout=1)  # timeout为设置的超时时间,单位:秒
r = requests.post('https://www.baidu.com')
r = requests.put('https://www.baidu.com')
r = requests.delete('https://www.baidu.com')
r = requests.head('https://www.baidu.com')
r = requests.options('https://www.baidu.com')  # 预检请求

增加请求头

传headers即可

url = 'https://www.baidu.com/s?wd=python'
headers = {
        'Content-Type': 'text/html;charset=utf-8',
        'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
    }
r = requests.get(url,headers=headers)

增加params

传 params即可

payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get('https://www.baidu.com',params=payload)
print(r.url)

#此url最终为:https://www.baidu.com/?key2=value2&key1=value1

增加消息体

传data即可

payload = {'key1': 'value1',
           'key2': 'value2'
           }
r = requests.post("http://httpbin.org/post", data=payload)
print(r.text)

Reqeusts默认是以form表单形式发送post请求

消息体为json格式

我们大都以json形式发送post请求,传json参数即可
注意:json传的payload不要自行再用json.dumps转换成json字符串,直接传字典即可

url = 'http://httpbin.org/post'
payload = {'key1': 'value1', 'key2': 'value2'}

r = requests.post(url, json=payload)
print(r.headers.get('Content-Type'))  # application/json  这是传了json参数后自动帮我们添加的请求头

如果此时你想打印日志,传参为json格式,可以使用json.dumps转成json格式:

json_data = json.dumps(payload, ensure_ascii=False)  # ensure_ascii要传False,否则中文会乱码
logg.info(f'\npost:{url},\n{json_data}\nresponse:{r.json()}'

如果你坚持将消息体传到data,请将参数用json.dumps将字典字典转换成json字符串,并手动增加请求头

url = 'http://httpbin.org/post'
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post(url, data=json.dumps(payload), headers={'Content-type': 'application/json'})

若以以文件形式发送post请求,传files即可

url = 'http://httpbin.org/post'
files = {'file': open('report.txt', 'rb')}
r = requests.post(url, files=files)
print(r.text)

response对象使用

r.url                             # 请求 URL
r.headers                         # 以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
r.status_code                     # 返回连接状态,200正常。
r.text                            # 默认以unicode形式返回响应内容,str类型
r.content                         # 以字节形式(二进制,也就是bytes类型)返回。会自动为你解码 gzip 和 deflate 压缩。
r.json()                          # 把网页中的json数据转成字典并将其返回。
r.encoding                        # 获取当前的编码
r.encoding = 'ISO-8859-1'         # 指定编码,r.text返回的数据类型,写在r.text之前。
r.ok						      # 查看r.ok的布尔值便可以知道是否登陆成功
r.cookies                         # Cookies
r.history                         # 请求历史

r.elapsed.total_seconds() #获取请求实际的响应时间 

其他

在使用过程中,我们经常拿postman中的json参数想放在代码中直接参数化,这个时候,可以复制到python文件中,直接就是字典,但是一般我们想把json和字典区分开来,json是双引号,我们字典一般用单引号,可以使用如下代码,将其转成单引号的字典,方便处理:json.loads(json.dumps(pre_json_data))

pre_json_data = {"key1": "value1", "key2": "value2"}
print(type(pre_json_data))  # 
dict_data = json.loads(json.dumps(pre_json_data))
print(dict_data)  # {'key1': 'value1', 'key2': 'value2'}

注:json.loads是将json转成字典,json.dumps是将字典转成json

你可能感兴趣的:(python专栏,python)