简体   繁体   English

HttpWebRequest GetResponse 被重定向

[英]HttpWebRequest GetResponse got redirected

Thanks for responses!感谢您的回复! Sorry I got my question wrong so I am rephrasing my question as below:对不起,我的问题错了,所以我将我的问题改写如下:

I need to read some text values from one of our old aspx pages of one internal website.我需要从一个内部网站的旧 aspx 页面之一读取一些文本值。

When I directly put url in a newly opened browser, first time, it got re-directed to default page, I need to click on a link to get the the page I wanted;当我在新打开的浏览器中直接输入url时,第一次被重定向到默认页面,我需要点击一个链接才能获得我想要的页面; then I put in the same url in the same browser window and hit Enter again, it goes to correct page and everything looks good.然后我在同一个浏览器窗口中输入同一个 url 并再次按 Enter,它转到正确的页面,一切看起来都很好。 I think the second time works because there are some session variable established.我认为第二次有效,因为建立了一些会话变量。

How can I achieve this from code?我怎样才能从代码中实现这一点? When I use following code trying to read that page (webReq.GetResponse()), I can see from Fiddler that it first hit the page I wanted, then it got redirected to the default.aspx of that site - exactly like if I do it manually first time with new browser window.当我使用以下代码尝试读取该页面 (webReq.GetResponse()) 时,我可以从 Fiddler 看到它首先点击了我想要的页面,然后它被重定向到该站点的 default.aspx - 就像我这样做一样第一次手动使用新的浏览器窗口。

Here is the code, I have tried call webReq.GetResponse() second time but Fiddler doesn't show any traffic for my second call.这是代码,我第二次尝试调用 webReq.GetResponse() 但 Fiddler 没有显示我第二次调用的任何流量。 Any suggestions?有什么建议? - Thanks! - 谢谢!

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)
{
    ...
}

Thanks for responding!感谢您的回复!

To mimic how it works in browser, I have to use HttpClient instead of HttpWebRequest, and call GetStringAsync twice to get to the page I need to go, as shown here为了模仿它在浏览器中的工作方式,我必须使用 HttpClient 而不是 HttpWebRequest,并调用 GetStringAsync 两次以到达我需要访问的页面,如下所示

using (HttpClient client = new HttpClient())
{
     var html = await client.GetStringAsync(url);
     html = await client.GetStringAsync(url);
     ...
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM