有谁知道如何筛选使用摘要 http 身份验证的抓取网站?
我使用这样的代码:
var request = (HttpWebRequest)WebRequest.Create(SiteUrl);
request.Credentials=new NetworkCredential(Login, Password)
我可以访问该网站的主页,但是当我尝试浏览任何其他页面(使用具有相同凭据的另一个请求)时,我收到“HTTP/1.1 400 Bad Request”错误。
我使用 Fiddler 将 C# 应用程序的请求与 Mozilla Firefox 请求进行比较。
我尝试访问的 2 个 URL 是:https://mysiteurl/forum/index.php https://mysiteurl/forum/index.php
以下是我的 C# 应用程序的 2 个请求 ():
Authorization: Digest username="xxx",realm="abc",nonce="NXa26+NjBAA=747dfd1776c9d585bd388377ef3160f1ff265429",uri="/forum/index.php",algorithm="MD5",cnonce="89179bf17dd27785aa1c88ad976817c9",nc=00000001,qop="auth",response="3088821620d9cbbf71e775fddbacfb6d"
Authorization: Digest username="xxx",realm="abc",nonce="1h7T6+NjBAA=4fed4d804d0edcb54bf4c2f912246330d96afa76",uri="/forum/viewforum.php",algorithm="MD5",cnonce="bb990b0516a371549401c0289fbacc7c",nc=00000001,qop="auth",response="1ddb95a45fd7ea8dbefd37a2db705e3a"
这就是 Firefox 发送到服务器的内容:
Authorization: Digest username="xxx", realm="abc", nonce="T9ICNeRjBAA=4fbb28d42db044e182116ac27176e81d067a313c", uri="/forum/", algorithm=MD5, response="33f29dcc5d70b61be18eaddfca9bd601", qop=auth, nc=00000001, cnonce="ab96bbe39d8d776d"
Authorization: Digest username="xxx", realm="abc", nonce="T9ICNeRjBAA=4fbb28d42db044e182116ac27176e81d067a313c", uri="/forum/viewforum.php?f=4&sid=d104363e563968b4e4c07e04f4a15203", algorithm=MD5, response="a996dae9368a79d49f2f29ea7a327cd5", qop=auth, nc=00000002, cnonce="e233ae90908860e1"
因此,在我的应用程序中,我在“nonce”字段中具有不同的值,而在 Firefox 中,该字段是相同的。另一方面,我在“nc”字段中具有相同的值,而 Firefox 会增加该字段。
此外,当我的应用程序尝试访问 Fiddler 中的网站页面时,我可以看到它总是收到响应“HTTP/1.1 401 需要授权”,而 Firefox 仅授权一次。我尝试设置 request.PreAuthenticate = true;但好像没有什么效果...
我的问题是:如何使用 C# 正确实现摘要身份验证?有没有标准方法或者我必须从头开始做?提前致谢。