我们知道通常浏览器支持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()