PythonImportant / python模块 / python记录 · 2020年12月14日

request模块中get、post请求详解(HTTP请求头、状态码)

我们知道通常浏览器支持get与post两种常见的请求方式,那么在python当中如何具体实现呢?
GET
首先是get,我们知道get指令比较简单,通常便是在浏览器窗口地址栏中使用?xx=xxxxx
那么在python当中如何实现这个过程呢?
首先我们需要了解requests模块

1)导入模块

import requests

2)发送请求

import requests

r = requests.get('https://www.baidu.com') # 最基本的不带参数的get请求
re = requests.get(url='https://www.baidu.com/s', params={'wd':'python'}) # 带参数的get请求

3)响应请求
r.encoding #获取当前的编码
r.encoding = ‘utf-8’ #设置编码
r.text #以encoding解析返回内容。字符串方式的响应体,会自动根据响应头部的字符编码进行解码。
r.content #以字节形式(二进制)返回。字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩。

r.headers 
#以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
r.request.headers
 # 前提是你要在参数里面写入了headers
r.status_code 
#响应状态码
r.raw 
#返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read()
r.ok 
# 查看r.ok的布尔值便可以知道是否登陆成功

#*特殊方法*#
r.json() #Requests中内置的JSON解码器,以json形式返回,前提返回的内容确保是json格式的,不然解析出错会抛异常
r.raise_for_status() #失败请求(非200响应)抛出异常

POST

与get类似这里多说一点就是可以发送json请求

import requests
import json

r = requests.post('https://www.baidu.com', data=json.dumps({'name': 'value'}))
print(r.json())

这里再比较下请求头与响应头

import requests

headers = {
'Referer': 'https://www.csdn.net/',
}
re = requests.get('http://www.baidu.com')
print(re.headers)
print(re.request.headers)

HTTP请求头
这里列举几个常见的:

‘Referer’: 当前网页从哪里跳转来
‘User-Agent’: 浏览器代理信息,
‘Accept-encoding’: 浏览器接收的编码,
‘Location’: 跳转到哪里,通常是3XX请求

HTTP响应状态码
1XX—信息提示
2XX—成功
3XX—重定向
4XX—客户端错误
5XX—服务端错误

会话保持
通常我们想要在请求一次后保持会话这时候我们就需要使用seesion

se = requests.Session()
se.get()
se.post()