简介
官网中对requests的介绍是”HTTP for Humans“。
requests是python实现的简单易用的HTTP库,使用起来比urllib简洁很多。我们在做安全研究中,经常会使用requests去发送一些请求,用于我们去编写exp。
基础用法
r=requests.get('http://hackergu.com/')
对网页发送一个GET请求
r=requests.post('http://hackergu.com/',data={'abc':'hackergu'})
对网页发送一个POST请求,参数abc=hackergu
下面用两道ctf题演示一下:
GET请求得Flag
import requests headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36' } data = {'what':'flag'} r = requests.get('http://123.206.87.240:8002/get/', params=data, headers=headers) print(r.text)
该代码的意思就是对url发送一个参数为what、值为flag的GET请求。
GET请求有参数时,就要使用params。
其中,print(r.text) 意为以文本形式打印源代码。
运行结果如下:
POST请求得Flag
import requests headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36' } r = requests.post('http://123.206.87.240:8002/post/', data={'what':'flag'}, headers=headers) print(r.text)
发送POST请求时,使用data字典形式。
其他的一些用法:
print(r.status_code) # 打印状态码
print(r.url) # 打印请求url
print(r.headers) # 打印头信息
print(r.cookies) # 打印cookie信息
print(response.text) #以文本形式打印网页源码
print(r.content) #以字节流形式打印,一般处理二进制文件
print(r.json) #解析json格式的数据,如果无法解析,则抛出异常