python的requests模块的使用

  1. 1 背景
  2. 2 开源地址
  3. 3 具体应用
    1. 3.1 GET请求
    2. 3.2 POST请求
    3. 3.3 上传文件
    4. 3.4 代理参数
    5. 3.5 cookies 和 session

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’)}

参数说明:

  1. report.png:文件名
  2. open(‘report.png’, ‘rb’):文件内容
  3. 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。

×

喜欢就点赞,疼爱就打赏