日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# webrequest 抓取数据时,多个域Cookie的问题

發布時間:2024/9/20 C# 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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()?//設置cookie域??
  • };??
  • 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"?//設置cookie域??
  • ???????????????????????};??
  • ????????cookieContainer.Add(cookie);??
  • ????}??
  • }??
  • ??
  • var?newUri?=?new?Uri(path);??
  • var?webRequest?=?(HttpWebRequest)WebRequest.Create(newUri);??
  • webRequest.Timeout?=?20000;??
  • //webRequest.CookieContainer?=?cookieContainer;??
  • 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();//todo:?Cookie?要這樣賦值,不能用CookieContainer????
  • ??
  • 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的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。