2012-08-14 56 views
3

我是新来看待.net的整个Web端,我遇到了一个小问题。HttpWebRequest不发送UserAgent

我试图做的HttpWebRequest如下:

String uri = "https://skyid.sky.com/signup/"; 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); 
request.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"; 
request.Method = "GET"; 
request.GetResponse(); 

凡URI是指向HTTPS站点。但是,一旦我在Fiddler中查看它,它已经删除了我的UserAgent,并且只显示了Host和Connection:Keep-Alive。

CONNECT skyid.sky.com:443 HTTP/1.1 
Host: skyid.sky.com 
Connection: Keep-Alive 

这是正常使用HTTPS或者我只是失去了一些东西?也许我甚至错过了Fiddler的一些东西,它并没有向我展示这些。

任何帮助将不胜感激,谢谢大家!

+1

如果我运行这个(与'当然uri'的值),我看到的用户代理中与HTTP和HTTPS提琴手。你大概已经在这里为你的例子剪掉了一些东西,因为发布空的内容并不常见。您可以在设置该标题后删除标题集合中重写的内容吗? – 2012-08-14 16:11:39

+0

@JonHanna,对不起,我实际上正在做一个GET,我已经在上面的代码中改变了它,并添加了更多的细节。所以我猜测它的Fiddler,如果你能看到UserAgent。 – Richard 2012-08-14 16:26:43

+0

您正在通过HTTPS(443)进行连接,因此您在此处看到的只是CONNECT HTTP动词(用于启动HTTPS连接)。请求的实际GET将在发送到服务器时进行加密。为了在Fiddler中看到它,有一个高级选项可以帮助您解密加密的连接以查看实际的请求。 – 2012-08-14 16:46:13

回答

7

我不认为你正在看正确的提琴手线。你显示的是一个CONNECT动词,而不是GET。应使用request.UserAgent属性正确设置UserAgent。调试请求另一种方法是configure network tracing在我个人比较喜欢提琴手您的应用程序级别:

<configuration> 
    <system.diagnostics> 
     <sources> 
      <source name="System.Net" tracemode="protocolonly" maxdatasize="1024"> 
       <listeners> 
        <add name="System.Net"/> 
       </listeners> 
      </source> 
     </sources> 
     <switches> 
      <add name="System.Net" value="Verbose"/> 
     </switches> 
     <sharedListeners> 
      <add 
       name="System.Net" 
       type="System.Diagnostics.TextWriterTraceListener" 
       initializeData="network.log" 
      /> 
     </sharedListeners> 
     <trace autoflush="true"/> 
    </system.diagnostics> 
</configuration> 
+0

它对Web服务ASMX有效吗?我使用客户端(代理WebService ASMX引用,而不是WCF服务参考)来调用ASMX服务。 – Kiquenet 2017-11-01 11:46:09