我正在尝试使用ASP.NET网站创建一个HttpWebRequest/HttpWebResponse会话,以便稍后通过url params解析HTML表单(这部分我知道该怎么做),但我不明白如何解析和设置cookie如会话ID.在Fiddler中,它显示ASP.NET会话ID是通过Set-Cookie在对url的/ path请求的响应中返回的,但是如何提取此会话ID并将其设置为下一个HttpWebRequest的cookie ?我知道这个Set-Cookie标头可以在HttpWebResponse.Headers.Keys中找到,但有解析它的直接路径吗?谢谢!
WebRequest request = HttpWebRequest.Create(url);
var credentialCache = new CredentialCache();
credentialCache.Add(
new Uri(url), // request url
"Digest", // authentication type
new NetworkCredential("user", "password") // credentials
);
request.Credentials = credentialCache;
Run Code Online (Sandbox Code Playgroud)
但是,这仅适用于没有URL参数的URL.例如,我可以下载http://example.com/test/xyz.html得很好,但是当我尝试下载时http://example.com/test?page=xyz,结果是400 Bad Request消息,服务器日志中包含以下内容(运行Apache 2.2):
Digest: uri mismatch - </test> does not match request-uri </test?page=xyz>
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是摘要规范要求从摘要哈希中删除URL参数 - 但是从传递给的URL中删除参数credentialCache.Add()并没有改变事物.所以它必须是相反的方式,在.NET框架中的某个地方错误地从URL中删除参数.