C# HttpWebRequest GetResponse已重定向
感谢您的回复!对不起,我的问题搞错了,所以我将我的问题重新表述如下: 我需要从一个内部网站的旧aspx页面中读取一些文本值 当我直接把url放到新打开的浏览器中时,第一次,它被重新定向到默认页面,我需要点击一个链接来获得我想要的页面;然后我在同一个浏览器窗口中输入相同的url,再次按Enter键,它进入正确的页面,一切看起来都很好。我认为第二次有效,因为建立了一些会话变量 如何从代码中实现这一点?当我使用下面的代码尝试读取该页面(webReq.GetResponse())时,我可以从Fiddler中看到它首先命中了我想要的页面,然后被重定向到该站点的default.aspx,就像我第一次使用新的浏览器窗口手动执行一样 下面是代码,我第二次尝试调用webReq.GetResponse(),但Fiddler没有显示第二次调用的任何流量。有什么建议吗谢谢C# HttpWebRequest GetResponse已重定向,c#,asp.net-mvc,httpclient,httpwebresponse,system.net.httpwebrequest,C#,Asp.net Mvc,Httpclient,Httpwebresponse,System.net.httpwebrequest,感谢您的回复!对不起,我的问题搞错了,所以我将我的问题重新表述如下: 我需要从一个内部网站的旧aspx页面中读取一些文本值 当我直接把url放到新打开的浏览器中时,第一次,它被重新定向到默认页面,我需要点击一个链接来获得我想要的页面;然后我在同一个浏览器窗口中输入相同的url,再次按Enter键,它进入正确的页面,一切看起来都很好。我认为第二次有效,因为建立了一些会话变量 如何从代码中实现这一点?当我使用下面的代码尝试读取该页面(webReq.GetResponse())时,我可以从Fiddle
string url = "http://mycompany.com/page1.aspx";
HttpWebRequest webReq = (HttpWebRequest)HttpWebRequest.Create(url);
try
{
webReq.CookieContainer = new CookieContainer();
webReq.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko";
webReq.Method = "GET";
webReq.Credentials = CredentialCache.DefaultCredentials;
using (WebResponse response = webReq.GetResponse())
{
using (Stream stream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(stream);
string res = reader.ReadToEnd();
...
}
}
}
catch (Exception ex)
{
...
}
感谢您的回复
为了模拟它在浏览器中的工作方式,我必须使用HttpClient而不是HttpWebRequest,并调用GetStringAsync两次以进入需要进入的页面,如下所示
using (HttpClient client = new HttpClient())
{
var html = await client.GetStringAsync(url);
html = await client.GetStringAsync(url);
...
}
你能看一看上面给出的例子吗;或者???@Mohamad,谢谢,我添加了missed webReq.Credentials=CredentialCache.DefaultCredentials,但仍然不工作…从浏览器使用fiddler跟踪流量,特别是查找流量中的任何401身份验证挑战或身份验证头。登录后,如果您收到
301重定向
响应代码,您需要捕获重定向URI并按照重定向获得200 OK
。嗨#startover,请尝试压缩然后解压缩您的webReq响应,如此链接所示: