HttpWebRequest没有发送UserAgent。

3

我是一个对于.net的Web端不太熟悉的新手,现在遇到了一个小问题。

我正在尝试进行如下的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的值),我可以在Fiddler中看到HTTP和HTTPS的用户代理。你可能已经在这里为你的示例删除了一些内容,因为POST空内容是不寻常的。你是否删掉了一些东西,在设置该标头后覆盖了标头集合? - Jon Hanna
@JonHanna,对不起,实际上我正在执行GET操作,我已经在上面的代码中进行了更改并添加了一些详细信息。所以我猜这是Fiddler,如果你能看到UserAgent。 - Richard
您正在通过HTTPS(443)连接,因此您在这里看到的是CONNECT HTTP动词(用于启动HTTPS连接)。当实际的GET请求发送到服务器时,它将被加密。为了在Fiddler中查看它,有一个高级选项可以帮助您解密加密连接以查看实际请求。 - Dan Joseph
啊,是的。@DanielJoseph 可能有它。我假设你已经设置了 Fiddler 选项,使其中间人攻击 HTTPS,这样你就可以看到 CONNECT 和 GET,但如果你没有设置,那么你就看不到它(毕竟 HTTPS 的目的就是防止人们看到东西)。 - Jon Hanna
1个回答

7

我认为你没有看到正确的Fiddler行。你展示的是一个CONNECT动词,而不是GET。应该使用request.UserAgent属性来正确设置UserAgent。另一种调试请求的方法是在应用程序级别配置网络跟踪,我个人更喜欢这种方法而不是使用Fiddler:

<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>

这对于 Web Service ASMX 是有效的吗?我使用客户端(代理 WebService ASMX 引用,而不是 WCF 服务引用)来调用 ASMX 服务。 - Kiquenet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接