生活随笔
收集整理的這篇文章主要介紹了
C# webrequest 抓取数据时,多个域Cookie的问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近研究了下如何抓取為知筆記的內容,在抓取筆記里的圖片內容時,老是提示403錯誤,用Chorme的開發者工具看了下:
這里的Cookie來自兩個域,估計為知那邊是驗證了token(登錄后才能獲取到token)
下載圖片的代碼:
[csharp]?view plaincopy
var?path?=?"https://note.wiz.cn/"?+?str.TrimStart('/');??var?extension?=?Path.GetExtension(path);??var?filepath?=?AppPath.Combine("Images/"?+?DateTime.Now.Ticks?+?extension);????const?string?userAgent?="Mozilla/5.0?(Windows?NT?6.1;?WOW64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/29.0.1547.76?Safari/537.36";??const?string?accept?=?"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";??const?string?acceptLanguage?=?"zh-CN,zh;q=0.8";??const?string?acceptEncoding?=?"gzip,deflate,sdch";??var?cookieContainer?=?new?CookieContainer();??var?cookie?=?new?Cookie??{??????Name?=?"token".Trim(),??????Value?=?Token,??????Domain?=?".wiz.cn".Trim()?};??cookieContainer.Add(cookie);??string[]?cookiesArr?=?txtCookie.Text.Split(';');??foreach?(string?s?in?cookiesArr)??{??????string[]?keyValuePair?=?s.Split('=');??????if?(keyValuePair.Length?>?1)??????{??????????cookie?=?new?Cookie?????????????????????????{?????????????????????????????Name?=?keyValuePair[0].Trim(),?????????????????????????????Value?=?keyValuePair[1].Trim(),?????????????????????????????Domain?=?"note.wiz.cn"????????????????????????};??????????cookieContainer.Add(cookie);??????}??}????var?newUri?=?new?Uri(path);??var?webRequest?=?(HttpWebRequest)WebRequest.Create(newUri);??webRequest.Timeout?=?20000;??webRequest.UserAgent?=?userAgent;??webRequest.Accept?=?accept;??webRequest.Headers["Accept-Language"]?=?acceptLanguage;??webRequest.Headers["Accept-Charset"]?=?acceptEncoding;??webRequest.Headers["Accept-Encoding"]?=?acceptEncoding;??webRequest.KeepAlive?=?true;??webRequest.Headers["Cache-Control"]?=?"no-cache";??webRequest.Headers["Upgrade-Insecure-Requests"]?=?"1";??webRequest.Headers["Pragma"]?=?"no-cache";??webRequest.Headers["Cookie"]?=?"token="?+?Token?+?";"?+?txtCookie.Text.Trim();??webRequest.Referer?=?newUri.AbsoluteUri;??HttpWebResponse?rsp?=?(HttpWebResponse)webRequest.GetResponse();????Stream?stream?=?null;??stream?=?rsp.GetResponseStream();??Image.FromStream(stream).Save(filepath);????if?(stream?!=?null)?stream.Close();??if?(rsp?!=?null)?rsp.Close();?? 奇怪的是:用?webRequest.CookieContainer = cookieContainer; 來跟cookie賦值,token參數總是賦不上,
后面改為:webRequest.Headers["Cookie"] = "token=" + Token + ";" + txtCookie.Text.Trim(); 就可以了,
CookieContainer 不是支持多個域的cookie嗎,難到跨域Cookie只能webRequest.Headers["Cookie"]這樣賦值嗎??沒弄明白,有知道的童鞋不吝賜教。
總結
以上是生活随笔為你收集整理的C# webrequest 抓取数据时,多个域Cookie的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。