代码之家  ›  专栏  ›  技术社区  ›  Duncan Bayne

在通过ssl进行http连接期间设置用户代理头?

  •  1
  • Duncan Bayne  · 技术社区  · 15 年前

    我正在使用 WebClient 在.net 2.0中初始化以通过ssl执行http post。

    目前我正在手动设置用户代理头,如下所示:

    wc = new WebClient();
    wc.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
    

    这可以正常工作,除非我通过代理服务器发出请求,该服务器执行http隧道,并期望在http connect命令中使用特定的用户代理头。

    当代理充当ssl的隧道时,它最初会接收一个http连接,该连接告诉它客户端试图连接到的位置。

    问题是,如果通过httpwebrequest.user agent或webclient.headers.add在.net中设置用户代理头,则会 将其添加到初始连接请求。它确实会将其添加到后续的ssl通信中,但这不是必需的。

    如果这是C++,我只需调用WiNutopPopeNe()来创建SeSon并设置PssZuServer PARAM来设置整个会话的用户代理。不幸的是,我在.net中找不到等效的。

    有人能指点我正确的方向吗?我确信其他人一定遇到过在.net中构建客户端应用程序的问题。

    3 回复  |  直到 12 年前
        1
  •  0
  •   blowdart    15 年前

    您将无法使用httpwebrequest类系列发送用户代理头。RFC说头是可选的(应该而不是必须)

    您可以向代理添加一个规则,以允许在没有用户代理头的情况下进行连接,或者为特定的目标服务器进行连接,或者最终使用.NET套接字类编写您自己的HTTP协议。

        2
  •  0
  •   miticojo    12 年前

    尝试使用httpwebrequest(framework 2.0):

    HttpWebRequest httpReq = HttpWebRequest.Create(new Uri("www.website.com"));
    httpReq.Headers["user-agent"] = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"; 
    

    我将它与windowsphone7sdk一起使用,它可以工作。

    更多信息: http://msdn.microsoft.com/en-gb/library/system.net.httpwebrequest(v=vs.80).aspx

        3
  •  0
  •   whiteWoolve    12 年前

    设置代理就足够了

    WebClient client = new WebClient();
    client.Headers["User-Agent"] =
        "Mozilla/4.0 (Compatible; Windows NT 5.1; MSIE 6.0) " +
        "(compatible; MSIE 6.0; Windows NT 5.1; " +
        ".NET CLR 1.1.4322; .NET CLR 2.0.50727)";
    client.Proxy = new WebProxy(your_proxy_url, true);
    

    你的代理URL可以是 http://proxy.company.com:8080/