0%

Ape-requests不支持http2

Pre:

在APE(Auto-Pentest)的时候,借鉴了w13scan的大部分代码.
里面发包探测都用到了requests模块,时不时会出这种bug

1
2
raise ValueError('Invalid header name %r' % (header,))
ValueError: Invalid header name b':authority'

Debug:

请求了该url:https://www.gstatic.com/proc/meminfo

输出该请求的headers后

1
{':authority': 'www.gstatic.com', 'sec-fetch-site': 'none', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36', 'accept-encoding': 'gzip, deflate, br'}

发现header中有个参数多了个冒号.


原因:

goole了一下,参考了http中的header为什么有这些部分?冒号的是什么

发现原来这些请求是用了HTTP2协议.而不是常见的HTTP1.1


HTTP2的简单介绍:

HTTP2 为什么要出现,又解决了HTTP1.1不能解决的什么事情呢?

简而言之就是

  • H2是一个二进制协议而,H1是超文本协议.传输的内容都不是一样的

  • H2遵循多路复用即,代替同一host下的内容,只建立一次连接. H1不是

  • H2可以使用HPACK进行头部的压缩,H1则不论什么请求都会发送

  • H2允许服务器,预先将网页所需要的资源PUSH到浏览器的内存当中.


解决办法:

思路1:

第一反应是看看requests支不支持HTTP2,发现是不支持的.
Does python-requests support HTTP2 and asynchronous calls?


思路2:

HTTP2应该还不是很普及,那就只能简单粗暴的暂时把headers中含冒号给替换成空字符.

或许应该在日志里把这类请求给记录下来,随便看看HTTP2用得多不多


Refs: