requests模块 编码和wireshark测试

结合wireshark进行测试、分析

1、编码问题

1.1 url路径

url路径中包含敏感字符,不会被url编码的字符包括:

'=;,!*-

会被url编码的字符包括:

"<>\\空格

非ascii字符会先进行utf-8编码,再进行url编码。比如字符'时'编码为%E6%97%B6

url中包含#,则不会自动转码,其字符和之后字符不会在请求中携带发送。但是会存储在url中

1.2 直接参数

和url具有基本一致的编码和非编码字符,新增不会被url编码的字符包括:

/?

 1.3 头部字段

允许头部字段的键和值包含'"<>等敏感字符,但是不能包含超过128的字符,即只能包含ascii基础字符。否则,会报异常,无法发送

键和值都可以包含空格,但是键无法包含:字符,且键和值都无法包含\n字符,否则会报异常,无法发送

1.4 体部

  • 默认是直接的utf-8编码的字节,没有自动设置content-type字段,也没有进行url编码

2、请求方法拓展

  • wireshark捕获,请求方法均为大写,无论设置时是大写、小写或混杂
  • 如果是设置为错误的值,比如ge,请求可以发送,但是测试中wireshark捕获不到请求的http, 只能捕获响应的
  • 如果是设置为错误的值,由服务器决定如何处理。如果对方法有限定可能会响应302,没有限定则可能会响应200

3、头部字段拓展

(1)初始字段

  • 默认的,会设置Host、User-Agent、Accept-Encoding、Accept和Connection字段

(2)覆盖和追加

  • 忽略大小写,如果设置的键已经存在,则是覆盖更新。否则,就是追加新的键值对
  • 无论是覆盖还是追加,都是使用设置的键和值,比如user-agent、user-aGent
  • 允许设置http协议规定的之外的键

(3)覆盖初始字段

  • 允许设置host、user-agent等初始字段
  • 设置host字段后,是将请求发送到新的host地址通信,而非与url中地址通信

3、空格编码

(1)url

经wireshark验证,url的路径中、路径末尾、参数中、参数末尾包含空格,都会被转为%20发送。而+字符作为+字符本身发送。

(2)请求头部

经wireshark验证,头部字段的值内部或末尾的空格或+字符,都会被直接发送,既不会省略也不会转换

posted @ 2023-06-04 17:32  挖洞404  阅读(26)  评论(0编辑  收藏  举报