安装requests模块
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
通过使用requests模块可以利用python实现对于网络的请求。
主要的请求的方法:
方法 | 用途 |
---|---|
GET | 发送get请求,获取界面资源 |
POST | 传输数据 |
PUT | 传输文件 |
HEAD | 发送一个head请求,获得响应头 |
DELETE | 删除文件 |
OPTIONS | 发送一个options请求,查询支持的方法 |
请求方法的参数(url之后有13个可选参数,需要显示指定参数名)
参数 | 含义 |
---|---|
URL | 请求地址 |
params | get请求参数,作为参数添加到URL中 |
data | post传输数据(字典,字节序列或文件对象) |
json | json格式的数据 |
headers | 指定http头部信息 |
cookies | 指定cookie信息 |
files | 文件(字典类型) |
allow_redirects=False/True | 重定向 |
timeout | 超时时间(秒)(最大等待时间) |
verify=False/True | 证书验证 |
stream=False/True | 工作流(延迟下载) |
hooks | 事件挂钩 |
auth | 身份验证 |
proxies | 代理 |
Response对象的属性
发起请求后会返回一个Response对象
response对象常用属性:
属性 | 含义 |
---|---|
res.url | URL |
res.encoding | 从HTTP header中猜测出的编码格式,若HTTP header中不存在charset字段,则认为编码为ISO-8859-1 |
res.apparent_encoding | 从网页内容中分析出的响应内容编码格式 |
res.status_code | 响应状态码 |
res.text | 以encoding方式编码的页面内容 |
res.content | 二进制方式响应正文 |
res.json | json解码器 |
res.raw | res.raw.read() |
res.history | 历史响应码 |
res.headers | 查看服务器响应头 |
res.request.headers | 查看请求头 |
res.cookies | 查看cookies |
res.auth | 身份验证 |
res.update | 更新 |
res.raise_for_status() | 若状态不是200,则引发HTTPError异常 |
会话
通过发起会话能够跨请求保持某些参数
s = requests.Session()
s.auth = ('auth','passwd')
s.headers = {'key':'value'}
r = s.get('url')
r1 = s.get('url1')
样例
# HTTP请求类型
# get类型
r = requests.get('https://github.com/timeline.json')
# post类型
r = requests.post("http://m.ctrip.com/post")
# put类型
r = requests.put("http://m.ctrip.com/put")
# delete类型
r = requests.delete("http://m.ctrip.com/delete")
# head类型
r = requests.head("http://m.ctrip.com/head")
# options类型
r = requests.options("http://m.ctrip.com/get")
# 获取响应内容
print(r.content) #以字节的方式去显示,中文显示为字符
print(r.text) #以文本的方式去显示
#URL传递参数
payload = {'keyword': '香港', 'salecityid': '2'}
r = requests.get("http://m.ctrip.com/webapp/tourvisa/visa_list", params=payload)
print(r.url) #示例为http://m.ctrip.com/webapp/tourvisa/visa_list?salecityid=2&keyword=香港
#获取/修改网页编码
r = requests.get('https://github.com/timeline.json')
print (r.encoding)
#json处理
r = requests.get('https://github.com/timeline.json')
print(r.json()) # 需要先import json
# 定制请求头
url = 'http://m.ctrip.com'
headers = {'User-Agent' : 'Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 4 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19'}
r = requests.post(url, headers=headers)
print (r.request.headers)
#复杂post请求
url = 'http://m.ctrip.com'
payload = {'some': 'data'}
r = requests.post(url, data=json.dumps(payload)) #如果传递的payload是string而不是dict,需要先调用dumps方法格式化一下
# post多部分编码文件
url = 'http://m.ctrip.com'
files = {'file': open('report.xls', 'rb')}
r = requests.post(url, files=files)
# 响应状态码
r = requests.get('http://m.ctrip.com')
print(r.status_code)
# 响应头
r = requests.get('http://m.ctrip.com')
print (r.headers)
print (r.headers['Content-Type'])
print (r.headers.get('content-type')) #访问响应头部分内容的两种方式
# Cookies
url = 'http://example.com/some/cookie/setting/url'
r = requests.get(url)
r.cookies['example_cookie_name'] #读取cookies
url = 'http://m.ctrip.com/cookies'
cookies = dict(cookies_are='working')
r = requests.get(url, cookies=cookies) #发送cookies
#设置超时时间
r = requests.get('http://m.ctrip.com', timeout=0.001)
#设置访问代理
proxies = {
"http": "http://10.10.1.10:3128",
"https": "http://10.10.1.100:4444",
}
r = requests.get('http://m.ctrip.com', proxies=proxies)
#如果代理需要用户名和密码,则需要这样:
proxies = {
"http": "http://user:pass@10.10.1.10:3128/",
}