收集未由HttpWebResponse

时间:2017-08-14 15:52:43

标签: c# http cookies

我需要从我拥有有效凭据的网站上抓取信息表,因为该网站的所有者不提供API。

我执行了登录并使用Fiddler保存了流量,我正在尝试复制关键步骤 我将展示我到目前为止所做的步骤,然后到达我被困的地方。

登录基本网址

CookieContainer jar = new CookieContainer();
request = (HttpWebRequest)WebRequest.Create(urlBase);
request.CookieContainer = jar;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
newUrl = response.ResponseUri.ToString();

随着返回,设置了cookie。当我查看CookieContainer时,它在通话后的计数为1 有趣的是,响应对象不包含cookie - 但我认为一切正常,因为我可以使用jar

第二次电话

我还没有出现名称和密码的页面,直到第4次通话才会发生。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlBase + 
secondCallFolderAddition);

CookieCollection bakery = new CookieCollection();

request.KeepAlive = true;
request.Headers.Add("Upgrade-Insecure-Requests", @"1");
//request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.57";
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp, image/apng,*/*;q=0.8";
request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br");
request.Headers.Set(HttpRequestHeader.AcceptLanguage, "en-US,en;q=0.8");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string newURL = response.ResponseUri.ToString();

我获得了OK状态,与原始的Fiddler流量捕获相比,响应看起来很好。在原来的第二次调用没有设置cookie,并且没有设置cookie。

第三次电话

但在这里我迷路了:浏览器发送了三个值的cookie数据(我已经混淆了):

__utma=1.123456789.123456789.123456789.123456789.1
olfsk=olfsk12345678901234567890123456789
hblid=abCDl11ABCabXabc1aABv1FLFX1RE1OS  

我不知道这些值的设定位置。它们似乎与Google Analytics(与我发现的文章相关)有关,但我不知道如何收集它们以便我可以将它们附加到我拨打的电话上。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(newUrl);

request.KeepAlive = true;
request.Headers.Add("Upgrade-Insecure-Requests", "1");
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.57";
request.Accept = "text/html,application/xhtml+xml,application/xml;
 q=0.9,image/webp,image/apng,*/*;q=0.8";

request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br");
request.Headers.Set(HttpRequestHeader.AcceptLanguage, "en-US,en;q=0.8");

///request.Headers.Set(HttpRequestHeader.Cookie, 
@"__utma=1.123456789.123456789.123456789.123456789.1; 
olfsk=olfsk12345678901234567890123456789; 
hblid=abCDl11ABCabXabc1aABv1FLFX1RE1OS");

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

string newURL = response.ResponseUri.ToString();

请注意带有Cookie数据的注释掉的行 - 我已尝试使用未注释的那行。

我从未收到对电话的回复

我非常感谢任何见解 我猜测第三次调用中的cookie数据是需要的,这是由在第二次和第三次调用之间收集的客户端脚本设置的 - 但我是新手并且不确定。
此外 - 如果在客户端设置,我如何获得有效的cookie,让我通过这个障碍。 (这是下一次调用中的另一个障碍,使用更多的cookie,我在服务器响应中没有看到设置 - 但我还没有。)

我知道我可以通过使用WebBrowser对象来解决这个问题,但这似乎是一个笨拙的解决方案。有没有笨拙的方式去?我应该尝试其他对象或库吗? (RestSharp?Postman?Webrequest对象而不是HTTPWeRequest?)

0 个答案:

没有答案