python发送get,post请求
-
1、Requests基本介绍
- 环境安装:pip install Requests
- requests就是爬虫中一个基于网络请求的模块
- 作用:模拟浏览器上网,发送请求
- 资料地址:http://cn.python-requests.org/zh_CN/latest/
-
2、请求与响应的组成
- 客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。
- 服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息,HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文
- 客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。
-
3、Requests发送请求
-
使用 Requests 发送网络请求非常简单。如果我们要发起一个GET/POST请求,直接调用requests库里的GET/POST方法即可
-
GET请求
- 方法一,参数放在URL中,直接传(不推荐)
import requests
url = "http://japi.juhe.cn/qqevaluate/qqkey=8dbee1fcd8627fb6699bce7b986adc45&qq=283340479"
r = requests.get(url)
print(r.text)
- 方法二,params参数分开(推荐)
import requests
url = “http://japi.juhe.cn/qqevaluate/qq”
par = {"key":"8dbee1fcd8627fb6699bce7b986adc45","qq":"28XXXXX"}
r = requests.get(url, params=par)
print(r.text) # 打印返回结果 文本
- POST请求
- 传统表单类post请求
- JSON类型的post请求
- 注:data参数支持字典格式也支持字符串格式,如果是字典格式,requests方法会将其按照默认表单urlencoded格式转换为字符串,如果是字符串则不转化
- 如果data以字符串格式传输需要遵循以下几点:
- 1) 必须是严格的JSON格式字符串,里面必须用双引号,k-v之间必须有逗号,布尔值必须是小写的true/false等等
- 2)不能有中文,直接传字符串不会自动编码
- 3)一般来说,建议将data声明为字典格式(方便数据添加修改),然后再用json.dumps()方法把data转换为合法的JSON字符串格式
- data和json傻傻分不清
- 传统表单类post请求
方法一:抓包看头部Content-Type参数:
-- application/json --------------------这种就是传json参数
---application/x-www-form-urlencode -------这种就是传data参数
方法二:直接看参数长相
----{“name1”:”value1”, “name2”,”value2”} ---这种传json
-- name1=value1&name2=value2
这种传data参数
- 4、自定义请求头
- 请求头,一般是传送服务器需要的一些附加信息,其中比较重要的就是User-Agent,Referer,Cookie等,常用的请求说明如下
Accept: 请求报头域,用于指定客户端可接受哪些类型的信息
Accept-Language: 指定客户端可接受的语言类型
Accept-Encoding: 指定客户端可接受的编码
Host:用于指定资源主机的IP和端口号,其内容为请求URL的原始服务器或网关的位置
Cookie:网站为了辨别用户进行会话跟踪而存储在用户本地的数据,它的主要功能是维持当前访问会话。
Referer: 用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,如做资源统计防盗链接处理等。
User-Agent: 可以是服务器识别客户端使用的操作系统及版本,浏览器及版本信息等。所以在做爬虫时要加上此信息,可以伪装浏览器;不加的话很容易被识别为爬虫。
Conten-Type:互联网媒体类型,用来表示具体请求中媒体类型信息;如text/html代表HTML格式,image/gif代表GIF图片,application/json代表JSON类型
- 5、Response返回内容
r.status_code # 响应状态码
r.content # 字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩
r.headers # 以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
r.json() # Requests中内置的JSON解码器 ,json转成python的字典了
r.url # 获取url
r.encoding # 编码格式-- r.cookies # 获取返回的cookie
r.text # 字符串方式的响应体,会自动根据响应头部的字符编码进行解码r.raise_for_status() # 失败请求(非200响应)抛出异常
r.ok # 返回True / False 状态码在200-400之间 返回True, 状态码在400-600之间返回 False
r.history # 有重定向请求的时候,可以查看重定向记录
r.apparent_encoding # 分析响应编码