requests进阶

it2024-03-16  58

还有10天就要开始中科大ctf了,对于小白的我,焦虑又刺激,话不多说,如果你和我一样都是小白,那我们麻溜的开始requests吧

上一次写爬虫用到了requests模块几个简单的函数,今天继续学习 我先学了学HTTP的基础 然后开始学requests 这里是requests官方文档网址

本地测试先搭建好服务端的环境

//这些是客户端向服务器发送的数据 <?php echo 'HEADER: '; print_r(apache_request_headers()); echo 'GET: '; print_r($_GET); echo 'POST: '; print_r($_POST); echo 'FILES: '; print_r($_FILES) ?>

客户端代码测试一下

import requests from requests import * payload = {'key1': 'value1', 'key2': 'value2'} # params相当于/?key1=value1&key2=value2 r = requests.get('http://127.0.0.1/experiment/requests/', params=payload) # data是post数据 # r = requests.post('http://127.0.0.1/experiment/requests/', data=payload) print(r.url) #url print(r.text) #相应内容

返回结果

好的完美,我们可以进行接下来的学习了

import requests from requests import * import json payload = {'key1': 'value1', 'key2': 'value2'} headers={'user-agent':'hello_gay'} # ***************** GET ********************* r = requests.get('http://127.0.0.1/experiment/requests/', params=payload,headers=headers) # 1.params相当于/?key1=value1&key2=value2 # 2.headers是设置请求头 # 3.json=payload自动把payload转换成json格式 # 或者使用json.dumps(payload)编码json.loads(json)解码然后用params传送 # 4.cookies={'cookies_are': 'working'}设置cookie # 5.allow_redirects=False禁用重定向 # 6.timeout=0.001超时后停止等待响应 # *************** POST *********************** # files={'file':open('1.png','rb')} files = {'file': ('report.csv', 'some,data,to,send\nanother,row,to,send\n')} #字符串作为文件发送 r = requests.post('http://127.0.0.1/experiment/requests/', data=payload,files=files) # 1.data是post数据 # 2.files=files上传文件 r = requests.post('http://127.0.0.1/experiment/requests/?key1=value', data=payload) # 同时发送post和get请求 # ************** 返回信息输出 ****************** r.encoding='utf-8'; #设置编码 print(r) #获得响应状态码 print(r.content) # 字节形式显示内容: b'HEADER: Array\n......' # print(r.json()) #json解码 print(r.url) #如果有重定向输出重定向之后的地址 # print(r.history) #许重定向时用 print(r.headers) #响应头,服务器向客户端响应的数据 print(r.text) #响应内容 print(r.raw.read()) #原始套接字相应(原始字节流),requests时需设置stream=True # with open('raw.txt', 'wb') as fd: #存储流式传输的内容视频,音频等 # for chunk in r.iter_content(): #iter_content自动解码gzip,deflate等 # fd.write(chunk)

往下学之前需要先了解一些http其他更深入一些的东西,否则会有点看不懂哦 HTTP头详解 HTTP头字段类型 POST常见的数据格式 稍稍总结一下特殊的

客户端发送服务器响应Accept,Accept-CharsetContent-TypeAccept-LanguageContent-LanguageUser-AgentServer

官方高级教程地址

import requests from requests import * payload = {'key1': 'value1', 'key2': 'value2'} headers={'user-agent':'hello_gay'} proxies={'http':'http://127.0.0.1','https':'https://127.0.0.1'} # proxies = {'http': 'http://user:pass@127.0.0.1'} #base认证 # ************** session ************** # 当你要给一个主机发送多个请求的时候使用Session保存会话 s = requests.Session() # session设置默认发送数据 # s.auth={'user':'pass'} # s = requests.get('http://127.0.0.1/experiment/requests/', params=payload,headers=headers,proxies=proxies) # {'user-agent':'hello_gay'}和{'user':'pass'}都将被发送 # 方法级参数不会在请求中保留,例如在requests.get(url,cookies={'cookie','aaa'}) # ****************** 预处理 ********************* req=requests.Request('POST','http://127.0.0.1/experiment/requests/',data=payload,headers=headers) pre=req.prepare() # pre.body='this is a prepared body' #相当于发送的data=payload部分 del pre.headers['Content-Type'] pre.headers['Keep-Dead'] = 'parrot' r=s.send(pre,stream=True,timeout=0.1,proxies=proxies) print(r.text) #服务器返回headers print(r.headers) #发送请求headers print(r.request.headers) print(r.request.body)

ctf几个例题

讲解在这个网站里面有几个ctf的例题 1.速度要快 解题代码

import requests import base64 url = 'http://123.206.87.240:8002/web6/' r = requests.session() # 题目中每次发送请求都会重新设置cookie,所以应当使用同一个会话 pre = r.get(url) flag64 = pre.headers['flag'] flag1 = base64.b64decode(flag64) flag2 = flag1.decode()[15:] # flag1.decode(): 跑的还不错,给你flag吧: NjE4NTE3 flag3 = base64.b64decode(flag2) # flag2: ODI2MjY1 flag = flag3.decode() # flag3.decode(): 551057 res = r.post(url, data={'margin': flag}) print(res.text)

2.秋名山老司机

import requests from bs4 import BeautifulSoup url = 'http://123.206.87.240:8002/qiumingshan/' s = requests.session() #和上一个一样也是同一个session r = s.get(url) beauty = BeautifulSoup(r.text) cal = beauty.find_all('div')[0].string[:-3] res = eval(cal) flag = s.post(url, data={'value': res}) print(flag.text)

3.快速口算

import requests import re url = 'http://lab1.xseclab.com/xss2_0d557e6d2a4ac08b749b61473a075be1/index.php' s = requests.session() r = s.get(url) cal = re.search("[0-9+*()]+[)]", r.text).group() flag=s.post(url,data={'v':eval(cal)}) print(flag.text)

4.cookies欺骗

import requests import re for i in range(0,30): url='http://123.206.87.240:8002/web11/index.php?line='+str(i)+'&filename=aW5kZXgucGhw' r=requests.get(url) print (r.text) url = 'http://123.206.87.240:8002/web11/index.php?line=&filename=a2V5cy5waHA=' r = requests.get(url,cookies={'margin':'margin'}) print(r.text)

其他的问题 json和python中字典的区别和联系

最新回复(0)