6.2 请求方式
HTTP的常用请求是GET和POST, Requests对此区分两种不同的请求方式。GET请求有两种形式,分别是不带参数和带参数,以百度为例:
判断URL是否带有参数,可以对符号“?”判断。一般网址末端(域名)带有“?”,就说明该URL是带有请求参数的,反之则不带有参数。GET参数说明如下:
(1)wd是参数名,参数名由网站(服务器)规定。
(2)python是参数值,可由用户自行设置。
(3)如果一个URL有多个参数,参数之间用“&”连接。
Requests实现GET请求,对于带参数的URL有两种请求方式:
两种方式都是请求同一个URL,在实际开发中建议使用第一种方式,因为代码简洁,如果参数是动态变化的,那么可使用字符串格式化对URL动态设置,例如'https://www.baidu.com/s?wd=%s' %('python')。
POST请求是我们常说的提交表单,表单的数据内容就是POST的请求参数。Requests实现POST请求需设置请求参数data,数据格式可以为字典、元组、列表和JSON格式,不同的数据格式有不同的优势。代码如下:
可以看出,左边的data是POST方法的参数,右边的data是发送请求到网站(服务器)的数据。值得注意的是,Requests的GET和POST方法的请求参数分别是params和data,别混淆两者的使用要求。
当向网站(服务器)发送请求时,网站会返回相应的响应(response)对象,包含服务器响应的信息。Requests提供以下方法获取响应内容。
● r.status_code:响应状态码。
● r.raw:原始响应体,使用r.raw.read()读取。
● r.content:字节方式的响应体,需要进行解码。
● r.text:字符串方式的响应体,会自动根据响应头部的字符编码进行解码。
● r.headers:以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在,则返回None。
● r.json():Requests中内置的JSON解码器。
● r.raise_for_status():请求失败(非200响应),抛出异常。
● r.url:获取请求链接。
● r.cookies:获取请求后的cookies。
● r.encoding:获取编码格式。