bugku 秋名山老司机

知识:

 

题目链接:http://123.206.87.240:8002/qiumingshan/

在这道题中我们用了requests中的session()函数、get()函数、post()函数、下面一一说明:

session对象可以使我们跨请求保持某些参数,也可以在同一个session实例发出的所有请求之间保持cookies

——创建一个session对象可以拥有以上的作用(但并没有实例化);

 

 PS:之前学了点爬虫所以以为能自己写出来,然后写post的时候懵了,session也即:

session其实是一个会话类,requests的所有请求方法,底层都是调用的这个类的对象。
其他方法和session的区别在于:
直接使用requests调用请求方法发送请求,每次都会创建一个新的session(会话对象),所以没有之前请求的cookies信息
直接创建一个session对象来发请求,那么每次发请求用的都是这个会话对象,所有能够保存之前的会话信息(cookies数据)

 

然后get()函数,用来进行模拟发送,获得相应url站点的信息,可分为有参和无参两种情况:

无参:

如以上代码,括号内是一个url,表示获取这个url内的信息。

有参:

payload = {'key1': 'value1', 'key2': 'value2'}

r = requests.get("http://pythontab.com/justTest", params=payload)

payload也即关键点

 

 

然后是post,也就是和 get一样

 

2、re库

 

re库的主要用途就是进行字符串匹

说到字符串匹配,正则表达式完全是绕不过的啊2333,在re库中,几乎所有的函数参数都有正则表达式,re库中正则表达式有两种表示方式:

①raw string类型

表示为:r'text',例如:r'[1-9]\d{5}',raw string是指不包含转义符的字符串;

如果正则表达式里含有转义字符之类的敏感字符,最好用这种方法。

②string类型

例如:'[1-9]\\d{5}';'\\d{3}-\\d{8}|\\d{4}-\\d{7}'

 

3、用到的python的其他函数

join()函数,用法:例如ex.join(str)

参数说明
ex:分隔符。可以为空(如本题)
str:要连接的元素序列、字符串、元组、字典
上面的语法即:以ex作为分隔符,将str所有的元素合并成一个新的字符串

返回值:返回一个以分隔符ex连接各个元素后生成的字符

 

 

代码:

import re
import requests

url = 'http://123.206.87.240:8002/qiumingshan/'
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0",}#写爬虫写习惯了。。。
r=requests.session()
res = r.get(url,headers = headers)
html=res.text
expression = re.search(r'(\d+[+\-*])+(\d+)', html).group()#从数字筛选正则表达式
result = eval(expression)

#print(html) 
#expression = re.search(r'(\d+[+\-*])+(\d+)', txt).group()
#result = eval(expression)
print(result)
#print(expression)
data={'value':result}#构造post的data部分
print(data)
res2=r.post(url,data=data)
print(res2.text)
     
#多刷新几遍,可能是服务器的原因,多运行几遍就可以了得出flag了
参考链接:https://blog.csdn.net/destiny1507/article/details/82414623
收获也即正则表达式的学习,学了差不多2个小时,然后就是post和session()的运用
posted @ 2020-02-25 23:27  adsry  阅读(335)  评论(0编辑  收藏  举报