第四周日志-用网络请求理解bp(2)
python网络请求库实现数据抓取、API调用还是后端服务的交互
以urllib3库为例
请求:
import urllib3
http = urllib3.PoolManager() # 创建连接池管理对象
url1=""
r1 = http.request('GET',url1) #request
print(r1.status)
request()
request(method, url, fields=None, headers=None, urlopen_kw)
其实跟bp顺序(格式)一样
参数和头我只见过两种传法,要么直接传一个没有逗号的参数,要么{"键":"值","键":"值"}
params = {'name':'Jack','country':'中国','age':30}
r = http.request('POST',url,fields=params)
print('返回结果:',r.data.decode('utf-8'))
关闭警告:urllib3.disable_warnings()
参数retires控制request重试次数
收:
response_header = r.info() # 获取响应头
for key in response_header.keys(): # 循环遍历打印响应头信息
print(key,':',response_header.get(key))
import urllib3 # 导入urllib3模块
import json # 导入json模块
#......
r = http.request('POST',url,fields=params) # 发送POST请求
j = json.loads(r.data.decode('unicode_escape')) # 将响应数据转换为字典类型
print('数据类型:',type(j))
print('获取form对应的数据:',j.get('form'))
print('获取country对应的数据:',j.get('form').get('country'))
r = http.request('GET',url) # 发送网络请求
print(r.data) # 打印二进制数据
f = open('python.png','wb+') # 创建open对象
f.write(r.data) # 写入数据
f.close() # 关闭
发:
文件上传
import urllib3
with open(1.jpg','rb') as f:
data = f.read() # 读取文件
http = urllib3.PoolManager() # 创建连接池管理对象
r = http.request('POST','目标url',body = data,headers={'Content-Type':'image/jpeg'})
print(r.data.decode())
import urllib3 # 导入urllib3模块
import json # 导入json模块
with open('test.txt') as f: # 打开文本文件
data = f.read() # 读取文件
http = urllib3.PoolManager() # 创建连接池管理对象
# 发送网络请求
r = http.request( 'POST','http://httpbin.org/post',fields={'filefield': ('example.txt', data),})
files = json.loads(r.data.decode('utf-8'))['files'] # 获取上传文件内容
print(files) # 打印上传文本信息
控制超时:
全局设置:在 PoolManager 对象初始化时指定 timeout。
单次请求设置:在 request() 方法中直接传递 timeout。
精确控制:使用 Timeout 类分别设置连接超时和读取超时。
re还在试着动调
【Windows 逆向】OD 调试器工具 ( 分析 OD 硬件断点处的关键代码 | 添加硬件断点 | 关键代码 | MOV 指令 | EAX 寄存器值分析 | 使用命令查看 esi+0cc 地址 )_od debug 分析空白-CSDN博客