requests进阶

还有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-Type
Accept-LanguageContent-Language
User-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中字典的区别和联系

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值