前言
在python中,发送http大多使用requests来发送,因为他使用起来非常方便,代码非常简洁。
快速入门
1.发送get请求
# 导入requests包
import requests
url = "http://www.tuling123.com/openapi/api"
myParams = {"key":"username","info":"plusroax"} # 字典格式,推荐使用,它会自动帮你按照k-v拼接url
res = requests.get(url=url, params=myParams)
print('url:',res.request.url)# 查看发送的url
print("response:",res.text) # 返回请求结果
可以看到,他帮我们自动拼接url地址了
2.发送post请求
# 导入requests包
import requests
url = "http://httpbin.org/post"
data = {"name": "plusroax","age": 18} # Post请求发送的数据,字典格式
res = requests.post(url=url, data = data)#这里传入的data,是body里面的数据。params是拼接url时的参数
print("发送的body:",res.request.body)
print("response返回结果:",res.text)
常用请求参数:
requests.get(url=url, params=myParams),之前我们用到了url和params参数,下面介绍一下其他参数
- url: url地址
- params:url参数,字典格式,使用此参数会自动拼接到url地址中
- data: 请求body中的数据,字典或字符串格式
- headers: 请求头信息,字典格式
- cookies: 字典格式,可以通过携带cookies绕过登录
- files: 字典格式,用于混合表单(form-data)中上传文件
- timeout: 超时时间(防止请求一直没有响应,最长等待时间),数字格式,单位为秒
常用返回结果:
- res.status_code: HTTP状态码,如200
- res.reason: HTTP状态码含义,如 OK
- res.headers: HTTP响应头信息
- res.text:获取返回结果,按req.encoding解码
- res.encoding: 获取当前使用的编码格式
- res.apparent_encoding:文本真正的编码格式
- res.cookies: 响应的cookieJar对象,可以通过
req.cookies.get(key)
来获取响应cookies中某个key对应的值 - res.json(): (注意,有括号),响应的json对象(字典)格式,慎用!如果响应文本不是合法的json文本,或报错
乱码问题:
如果当前使用的编码格式(res.encoding)和真正的编码格式(res.apparent_encoding)不一样,就会出现乱码。
原因在于requests会从服务器返回的响应头的 Content-Type 去获取字符集编码,如果content-type有charset字段那么requests才能正确识别编码,否则就使用默认的 ISO-8859-1. 一般那些不规范的页面往往有这样的问题.
这么一来,我原本传入的是utf-8编码,但是响应头没有传Content-Type字段,默认用了IOS-8859编码,解析的时候按照IOS-8859-1肯定乱码,与原本编码不符。
解决办法:
用真实编码去解析当前文本
res.encoding=res.apparent_encoding