如何使用 python 请求指定确切的 http 方法?

How can I specify the exact http method with python requests?

在 Burp Suite 中,捕获请求的第一行通常是 GET / HTTP/1.1。但是,我目前正在使用提供绝对 URL 的方法来练习 Host Header 注入,以便达到如下目的:

GET https://vulnerable-website.com/ HTTP/1.1
Host: bad-stuff-here

在 python 中,我正在使用请求库,无法指定我需要的确切 GET 请求。

import requests

burp0_url = "https://vulnerable-website.com:443/"
burp0_cookies = {[redacted]}
burp0_headers = {"Host": "bad-stuff-here", "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "en-US,en;q=0.5", "Accept-Encoding": "gzip, deflate", "Referer": "https://vulnerable-website.com/", "Connection": "close", "Upgrade-Insecure-Requests": "1"}

output = requests.get(burp0_url, headers=burp0_headers, cookies=burp0_cookies)

print(output, output.text)

我尝试在 header 字典 (header = {"GET":" / HTTP/1.1", ...}) 中指定 GET 请求,但这只会导致 GET Header 不是 r 第 6 行请求 正在发送:

GET / HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept-Encoding: gzip, deflate
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Connection: close
GET: /
Host: bad-stuff-here
Accept-Language: en-US,en;q=0.5
Referer: https://vulnerable-website.com/
Upgrade-Insecure-Requests: 1
Cookie: [redacted]

这是一个非常具体的问题,我不确定是否有人遇到过同样的问题,但我们将不胜感激。也许是 urllib 的解决方法或我缺少的东西。谢谢。

requests 在后台使用 urllib3。 您必须自己制作请求,因为没有客户端 [urlib, requests, http.client] 不允许您插入控制字符 by design.

您可以为此使用普通插座

msg = 'GET / HTTP/1.1\r\n\r\n'
s = socket.create_connection(("vulnerable-website.com", 80))
with closing(s):
    s.send(msg)
    buf = ''.join(iter(partial(s.recv, 4096), ''))