python的requests模块的使用
发布时间 :
阅读 :
1 背景
最近做CTF题目时经常碰见使用requests模块的问题,看着大佬们的现成代码,自己也痛下决心好好研究一下这个模块的使用
2 开源地址
先把官方的requests模块的开源地址放这了,显得咱专业(:
3 具体应用
3.1 GET请求
requests.get(url=url, headers=headers, params=params)
- url:请求url地址
- headers:请求头
- params:查询字符串
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| # coding:utf-8
import requests
# 请求url url = "http://httpbin.org/get"
# 请求头 headers = { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "User-Agent": "python-requests/2.9.1", }
# 查询字符串 params = {'name': 'Jack', 'age': '24'}
r = requests.get(url=url, headers=headers, params=params)
print r.status_code # 获取响应状态码 print r.content # 获取响应消息
if __name__ == "__main__": pass
|
3.2 POST请求
requests.post(url=url, headers=headers, data=params)
- url:请求url地址
- headers:请求头
- data:发送编码为表单形式的数据
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| # coding:utf-8
import requests
# 请求url url = "http://httpbin.org/post"
# 请求头 headers = { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "User-Agent": "python-requests/2.9.1", }
# 查询字符串 params = {'name': 'Jack', 'age': '24'}
r = requests.post(url=url, headers=headers, data=params)
print r.status_code # 获取响应状态码 print r.content # 获取响应消息
if __name__ == "__main__": pass
|
3.3 上传文件
requests.post(url=url, headers=headers, data=params, files=files)
- url:请求url地址
- headers:请求头
- data:发送编码为表单形式的数据
- files:上传的文件,如:files = {‘upload_img’: (‘report.png’, open(‘report.png’, ‘rb’), ‘image/png’)}
参数说明:
- report.png:文件名
- open(‘report.png’, ‘rb’):文件内容
- image/png:文件类型
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| # coding:utf-8
import requests
# 请求url url = "http://httpbin.org/post"
# 请求头 headers = { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "User-Agent": "python/2.9.1", }
# 查询字符串 params = {'name': 'Jack', 'age': '24'}
# 文件 files = {'upload_img': ('report.xlsx', open('report.xlsx', 'rb'), 'image/png')} r = requests.post(url=url, data=params, headers=headers, files=files)
print r.status_code # 获取响应状态码 print r.content # 获取响应消息
if __name__ == "__main__": pass
|
3.4 代理参数
1 如果需要使用代理,可以你通过为任意请求方法提供proxies参数来配置单个请求:
示例代码:
1 2 3 4 5 6 7
| import requests
# 根据协议类型,选择不同的代理 proxies = {"http": "http://12.34.56.79:9527"}
response = requests.get("http://www.baidu.com", proxies = proxies) print (response.text)
|
2 私密代理验证(特定格式)
示例代码:
1 2 3 4 5 6 7 8 9 10
| import requests
# 如果代理需要使用HTTP Basic Auth,可以使用下面这种格式: #用户名 密码
proxy = { "http": "mr_mao_hacker:sffqry9r@61.158.163.130:16816" }
response = requests.get("http://www.baidu.com", proxies = proxy)
print (response.text)
|
3web客户端验证: 如果是Web客户端验证,需要添加 auth = (账户名, 密码)
示例代码:
1 2 3 4 5 6 7
| import requests
auth=('test', '123456')
response = requests.get('http://192.168.199.107', auth = auth)
print (response.text)
|
3.5 cookies 和 session
1 如果一个响应中包含了cookie,那么我们可以利用 cookies参数拿到:
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13
| import requests
response = requests.get("http://www.baidu.com/")
# 7. 返回CookieJar对象: cookiejar = response.cookies
# 8. 将CookieJar转为字典: cookiedict = requests.utils.dict_from_cookiejar(cookiejar)
print cookiejar
print cookiedict
|
2 session
在 requests 里,session对象是一个非常常用的对象,这个对象代表一次用户会话:从客户端浏览器连接服务器开始,到客户端浏览器与服务器断开。
会话能让我们在跨请求时候保持某些参数,比如在同一个 Session 实例发出的所有请求之间保持 cookie 。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达,可以邮件至 xingshuaikun@163.com。