为什么这个代理在curl中使用时需要身份验证,而在python请求中不需要?

acruukt9  于 2022-11-13  发布在  Python
关注(0)|答案(1)|浏览(144)

我使用的是https://github.com/abhinavsingh/proxy.py,使用基本身份验证对其进行设置,如下所示:

proxy --basic-auth "user:pass"

当我将它与curl一起使用时,它需要代理身份验证:

curl -I -x localhost:8899 http://example.com  => 407
curl -I -x user:pass@localhost:8899 http://example.com => 200

但是当我在Python中使用它时,我可以在不提供任何身份验证的情况下访问它:

import requests

proxies = {
  "http": "http://127.0.0.1:8899",
  "https": "http://127.0.0.1:8899"
}

response = requests.get("https://www.example.com", proxies=proxies)

print(response.status_code)

我得了200分。我错过了什么吗?

r6hnlfcb

r6hnlfcb1#

这看起来像是proxy.py中的一个bug。它似乎是由requests发出一个没有请求头的HTTP/1.0请求触发的。您可以自己触发同样的问题:

$ telnet localhost 8899
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
CONNECT www.example.com:80 HTTP/1.0

HTTP/1.1 200 Connection established

requests不同,curl总是发送请求头,即使在使用--proxy1.0时也是如此,因此不可能触发相同的行为。

相关问题