requests库学习

[toc]

由于自己太菜了,大一学不会web,也因为太懒不愿意去审源码。而且misc又有很多有趣的题目,就被吸引过去了。但是我打CTF的初衷就是学习web的,看到身边的师傅们web越来越强了,而我还是这么菜,所以拖到大二才真正开始web学习。希望还能赶上师傅们的脚步。

此文章会在碰到新的requests库知识时,随时更新。

requests库作为python里写网页脚本非常重要库之一,经常用得到,所以学习使用requests库很关键。

安装命令:pip install requests

1.利用requests直接执行get请求

import requests

res = requests.get("http://47.110.54.152/")
print(res.url) #查看url地址
print(res.encoding) #查看字符编码
print(res.text) #查看响应内容
print(res.content) #查看数据流
print(res.status_code) #查看响应码
print(res) #直接查看res,类似于查看响应码
print(res.cookies)#查看cookies
#如果有cookies的话才会有值,本次测试的是没有输出cookies的网站

输出结果

http://47.110.54.152/
UTF-8
.........
.........
200
<Response [200]>
<RequestsCookieJar[]>

2.利用requests进行post请求

post请求比较复杂,一般需要知道先在网页中获取各种所需的参数。

比如在爬取有道翻译的过程中,利用爬虫脚本爬取有道翻译的post请求:

我们可以看到,有道翻译利用参数i来储存,还有其余很多的审查元素。

而在最终翻译结果则储存在['translateResult'][0][0]['tgt']

在General中可以看到request URL的地址,

然后我们就可以写一个爬虫脚本了:

import requests

content=input('请输出你要翻译的内容:')
url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
data = {
    "i": content,
    "from":"AUTO",
    "to": "AUTO",
    "smartresult": "dict",
    "client": "fanyideskweb",
    "salt": "16016993115161",
    "sign": "e4dd3b253a91d059f1f725e6c3b20e27",
    "lts": "1601699311516",
    "bv": "b396e111b686137a6ec711ea651ad37c",
    "doctype": "json",
    "version": "2.1",
    "keyfrom": "fanyi.web",
    "action": "FY_BY_REALTlME",
}
r = requests.post(url, data = data)
result = r.json()
print('result:%s'%(result['translateResult'][0][0]['tgt']))

利用这个脚本,则可以随时爬取有道翻译的post请求了。当然,如果一次性传输大量的流量给网站,有可能ip会被ban,最好不要轻易尝试。

3.利用requests进行web验证

很多时候在网页中需要输入参数,而requests可以替人胜任这个工作。代码如下:

import requests

auth=('answer', '123456')
response = requests.get('http://47.110.54.152:1221/', auth = auth)
print(response.text)

这个代码就是给http://47.110.54.152:1221/这个网站传了一个answer=123456的值

由于水平有限,目前对requests库有一些了解的用处已写在文章中,其他功能以后随缘补充。

实战:

http://47.110.54.152:1221/

题目要求:连续一千次输入对计算结果,(当然可以计算器慢慢解)

F12查看数据保存位置,这三行话都是保存在text中的,没法直接读取text中的数据,所以需要利用正则表达式提取式子。

随便输入一个答案123456,能发现答案储存在answer中,所以就可以写出一个脚本解题。

脚本如下:

import requests
import re
import time

url = 'http://47.110.54.152:1221/index.php'
s = requests.session()
source = s.get(url)
for i in range(0,1001):
    equation = re.findall(r'\d+.[+-].\d+', source.text) #算式正则
    answer = eval(equation[0])
    print(answer , i)#运行的时候看得见效果
    source = s.post(url,data={"answer":answer})#向网站传入answer值
    time.sleep(0.01)#让每次输入有停顿,防止网页崩溃
print(source.text)

发表评论