一、get请求

1.导入requests后,用get方法就能直接访问url地址,如:http://www.cnblogs.com/yoyoketang/,

2.这里的r也就是response,请求后的返回值,可以调用response里的status_code方法查看状态码

3.状态码200只能说明这个接口访问的服务器地址是对的,并不能说明功能OK,一般要查看响应的内容,r.text是返回文本信息

二、post请求

1.发一个带参数的get请求,如在博客园搜索:yoyoketang,url地址为:http://zzk.cnblogs.com/s/blogpost?Keywords=yoyoketang

2.请求参数:Keywords=yoyoketang,可以以字典的形式传参:{"Keywords": "yoyoketang"}

3.多个参数格式:{"key1": "value1", "key2": "value2", "key3": "value3"}

三、content和text的区别

1.百度首页如果用r.text会发现获取到的内容有乱码,因为百度首页响应内容是gzip压缩的(非text文本)

2.如果是在fiddler工具乱码,是可以点击后解码的,在代码里面可以用r.content这个方法,content会自动解码 gzip 和deflate压缩

四、response的返回内容还有其它更多信息

-- r.status_code     #响应状态码
-- r.content           #字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩
-- r.headers          #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
-- r.json()             #Requests中内置的JSON解码器
-- r.url                  # 获取url
-- r.encoding         # 编码格式
-- r.cookies           # 获取cookie
-- r.raw                #返回原始响应体
-- r.text               #字符串方式的响应体,会自动根据响应头部的字符编码进行解码
-- r.raise_for_status() #失败请求(非200响应)抛出异常

五、get与post的区别

1、get参数通过url传递,post放在request body中

2、get请求在url中传递的参数是有长度限制的,而post没有

3、get比post更不安全,因为参数直接暴露在url中,所以不能用来传递敏感重要信息。

4、get请求只能进行url编码,而post支持多种编码方式(第一种:application/x-www-form-urlencoded,第二种:multipart/form-data,第三种:application/json,第四种:text/xml)

5、get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留。

6、GET产生一个TCP数据包;POST产生两个TCP数据包。

长的说:

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

(据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。)