当前位置: 首页 > 知识库问答 >
问题:

通过级联代理的HTTP Connect请求

董翰池
2023-03-14

我正在用python创建一个基于BaseHTTPServer的代理服务器。它所做的是创建到squid代理的连接,识别浏览器请求(GET、CONNECT、POST等),并向其添加代理授权标头,然后将此请求转发给squid代理。

问题是,据我所知,当我发送连接请求时,我应该将所有相应的流量中继到squid代理。但是,正如我在wireshark中看到的,squid代理没有回复握手的“Client Hello”部分,我认为这是由于squid代理不理解我刚刚转发给它的SSL二进制数据。

在这种情况下,我如何处理HTTPS请求?

该代码或多或少类似于TinyHTTPProxy:http://www.oki-osk.jp/esc/python/proxy/

共有1个答案

慕容聪
2023-03-14

RFC 2817定义了连接方法。它不同于其他HTTP方法,因为接收代理(您的Python代理)被定向为直接建立到目标主机(RFC中称为授权)的原始TCP隧道。

代理不能对将通过该隧道发送的数据做出任何假设;它不一定是HTTP——客户机可以使用隧道说出它喜欢的任何协议。实际上,SSL≠ HTTP。

你有两个选择:

>

  • 直接打开到请求的目标主机的TCP连接
  • 向上游代理(Squid)发出连接请求。这在规格范围内:

    可能是代理本身只能通过另一个代理到达请求的源服务器。在这种情况下,第一个代理应该对下一个代理发出连接请求,请求一个到管理局的隧道。代理不得使用任何2xx状态代码进行响应,除非它与管理局建立了直接或隧道连接。

    确保您的请求包含所需的主机标题。

    CONNECT www.google.com:443 HTTP/1.1
    Host: www.google.com:443
    Proxy-Authorization: ...
    ​
    

  •  类似资料:
    • 所以,我正在管理一个公司超文本传输协议服务器,并被要求升级服务器以支持使用超文本传输协议2的代理请求 这是测试客户端。我正在jdk 17中使用HttpClient。下面是测试用例。 我的服务器运行在超文本传输协议2上,我没有得到任何响应。在调试我的服务器上收到的数据包时看起来像这样: 这既不是超文本传输协议2格式,也没有我的服务器被设计为解析的任何升级标头,在不使用代理的情况下通常看起来像这样:

    • 需要通过代理执行REST请求。有几个HTTP代理服务器可用,受基本身份验证的保护。使用Java16。 访问HTTP资源时完全工作的请求示例:

    • 问题内容: 我正在尝试使用HttpsUrlConnection类将请求发送到服务器。服务器存在证书问题,因此我设置了一个可信任所有内容的TrustManager以及同样宽松的主机名验证程序。当我直接发出请求时,此管理器工作正常,但是当我通过代理发送请求时,似乎根本没有使用过。 我这样设置代理设置: 默认SSLSocketFactory的TrustManager的设置如下: 如果运行以下代码,则最终

    • 问题内容: 父类中有一个列表List。保存父项后,已添加或更改的子项应通过hibernate保存/更新。 我找到了很多解释,但是,我只是没有使它起作用。 Parent.class试试A Parent.class试试B 孩子被添加到新的父母。之后两者都保存 但是在冲洗时,出现以下错误: 有人看到我的错误吗? 非常感谢!! 问题答案: 我想如果您从第一条评论中回答这个问题,我们就会遇到这种情况: 你有

    • 我们当前的项目需求是将一些请求路由到第三方外部api服务器。为此,我们使用的是基于spring祖尔的路由器服务。 现在的要求是,对于某些endpoint,到外部api服务器的请求已经通过不属于我们的外部代理服务器路由, 如何通过卷曲完成此操作: 通过给定的代理重定向请求。如何通过spring-祖尔服务器做到这一点? 我有一条线索?https://github.com/spring-cloud/sp

    • 我尝试在jmeter中为用java编写的web服务(Spring MVC Hibernate)实现负载测试。服务器是RESTFull的,客户端(angularjs)与服务器通信。 我想用jmeter HTTP请求记录器转储HTTP请求,就像jmeter用户指南教程一样。 问题是,在web浏览器上使用jmeter作为代理时,我不断收到415 Http错误。因此,该网页在试图发布数据时遇到错误,但失败