客户端通过Http代理服务器连接服务器(Windows c \ c ++)

时间:2016-01-20 14:13:49

标签: c++ windows sockets http-proxy

我们有一个C \ S模型程序。用户使用客户端连接我们的服务器。但是一些公司用户通过HTTP代理服务器(不是SOCKS4或SOCKS5代理服务器)上网。在这种情况下,我们需要提供一个功能来设置客户端代理服务器(就像其他一些软件一样)。如果这样做,我们应该将原始数据打包到Http协议。所以我想知道:

  1. 方法好吗?或者还有其他一些更好的方法来解决这个问题。
  2. 如果这样做,我们的服务器能否主动向客户端发送数据?
  3. 您是否知道其他已发布的软件具有设置代理服务器如何处理此问题的功能?

1 个答案:

答案 0 :(得分:1)

这不是HTTP代理的工作方式。您不必将现有数据重新打包为HTTP。您所需要做的就是:

  1. 连接到HTTP代理端口,并向其发送HTTP CONNECT请求,指定要连接的主机/ IP和端口,例如:

    CONNECT hostname:port HTTP/1.0
    User-agent: MyApp
    

    如果代理需要身份验证,您还可以根据需要提供包含编码凭据的Proxy-authorization标头,例如:

    CONNECT hostname:port HTTP/1.0
    User-agent: MyApp
    Proxy-authorization: basic dGVzdDp0ZXN0
    
  2. 如果代理接受请求并成功连接到请求的主机,它将发回HTTP 200回复,例如:

    HTTP/1.0 200 Connection established
    Proxy-agent: ProxyApp/1.1
    
  3. 您现在可以像以前一样发送和接收数据,代理将按原样在客户端和两个方向上传递数据。除了建立代理连接之外,您不必更改任何代码逻辑。

  4. 有关详细信息,请参阅Tunneling TCP based protocols through Web proxy servers

    此过程类似于其他代理协议的工作方式,如SOCKS。客户端连接到代理,请求连接到服务器主机,然后客户端和服务器来回传递数据,就像代理不存在一样。