0x01 requests.get()


r = requests.get(url, params={}, headers={}, cookies={}, allow_redirects=True, timeout=float, proxies={}, verify=True)

参数名 类型 说明
url str 请求地址, 必填
params dict 设置参数,字典类型,如:{‘key1’: ‘value1’, ‘key2’: ‘value2’};
headers dict 设置头部,字典类型,如:{‘user-agent’: ‘my-app/0.0.1’};
cookies dict 设置cookie,字典类型,如:{“key”: “value”};
allow_redirects bool 设置重定向,默认开启;
timeout float 设置请求超时时间(s);
proxies dict 设置代理,字典类型,如:{“http”: “http://10.10.1.10:8080“};
verify bool 设置证书验证,默认True,也可以是CA库地址;

 

0x02 requests.post()


r = requests.post(url, data={}, headers={}, cookies={}, json=”, files={}, allow_redirects=True, timeout=float, proxies={}, verify=True)

参数名 类型 说明
url str 请求地址, 必填
data dict 设置表单数据,字典类型;也可以接收 json.dumps()过后的数据;
headers dict 设置头部,字典类型,如:{‘user-agent’: ‘my-app/0.0.1’};
cookies dict 设置cookie,字典类型,如:{“key”: “value”};
json str 传递json数据,如:{‘key’: ‘value’};
files dict 上传文件,如:{‘file’: open(‘report.txt’, ‘rb’)}. 注:最好使用二进制打开文件;
allow_redirects bool 设置重定向,默认开启;
timeout float 设置请求超时时间(s);
proxies dict 设置代理,字典类型,如:{“http”: “http://10.10.1.10:8080“};
verify bool 设置证书验证,默认True,也可以是CA库地址;

 

默认requests发送请求时是可以响应跳转的,也就是页面本来响应码是302,但是我们通过r.status_code获取到的却是200,我们来测试一下:

Curl本身是不会响应跳转的

[root@localhost tmp]# curl -I http://10.59.0.248:443/lua/if_stats.lua

HTTP/1.1 302 Found

Set-Cookie: session=; path=/; expires=Thu, 01-Jan-1970 00:00:01 GMT; max-age=0; HttpOnly

Location: /lua/login.lua?referer=10.59.0.248:443/lua/if_stats.lua

可以看到响应码是302,但是我们使用requests请求一下。

>>> r = requests.get('http://10.59.0.248:443/lua/if_stats.lua')

>>> r.status_code

200

可以看到响应码为200

另外使用r.history也可以看到响应了302跳转

>>> r.history

[<Response [302]>]

这里requests包提供了allow_redirects参数用于指定是否响应302跳转。

>>> r = requests.get('http://10.59.0.248:443/lua/if_stats.lua', allow_redirects=False)

>>> r.status_code

302

 

0x03 请求响应


字段 类型 说明
r.url str 被编码后的请求url
r.text unicode 返回处理后的Unicode型数据
r.content str 返回bytes型的原始数据(二进制)
r.json() dict 将json数据解码后返回
r.status_code int 返回响应状态码
r.raise_for_status() 若发送一个错误请求,则抛出此异常
r.headers dict 服务器响应头部信息
r.cookies dict Response中的cookies.
r.history list Response对象(请求历史)列表,按最老到最近的请求进行排序
r.encoding str r.text输出的编码格式,也就是网页编码
r.apparent_encoding str r.content原始数据编码类型
r.elapsed 请求url花费时间
r.request.headers dict 请求头信息

 

r.request.headers

>>> r.request.headers

{'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'User-Agent': 'python-requests/2.18.4'}

可以看到默认Request发送的UA是python-requests/2.18.4,如果用request去爬取一些站点很容易识别到,一定要自定义UA。

>>> headers = {'User-Agent': 'vinc'}

>>> r = requests.get('http://10.59.0.248:443/lua/if_stats.lua',headers=headers)

>>> r.request.headers

{'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'User-Agent': 'vinc'}

 

r.json()

requests中已经有了内置r.json()函数用于处理返回的Json格式内容

>>>r = requests.get('http://ip.taobao.com/service/getIpInfo.php?ip=122.88.60.28')

>>>r.json()['data']['country']

'中国'

 

r.cookies

将CookieJar转为字典;

>>> r = requests.get('http://www.hao123.com')

>>> requests.utils.dict_from_cookiejar(r.cookies)

{'hz': '0', 'BAIDUID': 'CE079CF1EAF562FA41FF35634C6D54B0:FG=1', 'ft': '1', 'v_pg': 'normal'}