http协议包含请求与应答
requests模块
requests模块用于访问网络
一、请求
get请求
requests.get(URL,params,headers...)
- 不带参数
import request
requests.get('http://www.baidu.com')
=
requests.request('get','http://www.baidu.com')
- 带参数, 参数传递在URL中,并一起发送给服务器
data = {'q': 'python', 'cat': '1001'}
response = requests.get('http://www.douban.com',params = data )
response.url # 实际请求的URL
'https://www.douban.com/search?q=python&cat=1001'
- 有headers,传入headers参数来增加请求头中的headers信息
url = 'http://www.baidu.com/s?'
params = {'wd':'长城'}
hearders_info = {'User-Agent':' Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36'}
requests.get(URL=url ,params=params ,headers=headers_info)
post请求
http请求包括三个部分,请求行,请求报头,消息主体。
HTTP协议规定post提交的数据必须放在消息主体中,但是协议并没有规定必须使用什么编码方式。根据请求头中的Content-Type字段,来获知请求中的消息主体是用何种方式进行编码.
具体的编码方式包括:
application/x-www-form-urlencoded
最常见post提交数据的方式,以form表单形式提交数据。
application/json
以json串提交数据。
multipart/form-data
一般使用来上传文件。
- form表单形式提交数据
form表单形式发送post请求,只需要将请求的参数构造成一个字典,然后传给requests.post()的data参数。
requests.post(url,data=data)
- json方式发送请求
当前很多api是以json形式提交的,所以在使用post的时候我们可能想提交json数据。
提交json有两步:一是data要编码成json形式(python中的字典形式上和json一样但本质上不一样所以要编码),二是设置“Content-type”头的值为application/json
headers={}
headers['Content-Type']='application/json' # 一定要设置Content-Type值为application/json
url='https://www.baidu.com'
data={"username":"ls","password":"toor"}
#r = requests.post(url,headers=headers,data=json.dumps(data),verify=False) #json.dumps把data格式化成json
r = requests.post(url,json=data,verify=False) #或者直接使用json参数代替data,此时requests会自动进行格式化和设置Content-Type头的工作
- 上传文件,以multipart方式
上传文件需要更复杂的编码格式,但是requests把它简化成files参数:
upload_files = {'file': open('report.xls', 'rb')}
r = requests.post(url, files=upload_files)
二、响应
response = requests.get(url) /requests.post(url)
- response.text :返回响应内容,返回的是Unicode格式,通常需要转换为utf-8格式,否则就是乱码
- response.content :返回响应内容,返回的是二进制字节流数据(不进行解码,开发者可以根据实际进行某种编码格式进行解码),可以用来保存图片等二进制文件,可以下载视频之类的
- response.status_code :返回响应状态码
- response.url :返回访问地址url
- response.header :返回响应header
- response.request.headers :返回请求header
- response.cookies :返回cookies
- response.json() : 将json格式的数据,进行反序列化