同一會話中的多個 WebRequest
問題
我正在嘗試編寫一個將網頁(及其影像)儲存為 html 頁面的函式。 我正在使用 HttpWebRequest 來請求網頁的內容。 我的功能看起來像
void SaveUrl(string sourceURL, string savepath){ HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(sourceURL); HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse(); StreamReader responseReader = new StreamReader(response.GetResponseStream()); string sResponseHTML = responseReader.ReadToEnd(); using (StreamWriter sw = new StreamWriter(savepath, false)) { sw.Write(sResponseHTML); } string[] ImageUrl = GetImgLinks(sResponseHTML); foreach (string imagelink in ImageUrl) { HttpWebRequest imgRequest = (HttpWebRequest)WebRequest.Create(imagelink); HttpWebResponse imgresponse = (HttpWebResponse)imgRequest.GetResponse(); //Code to save image }}
我的問題是我想在同一個會話中建立所有 webrequest,並且不想為每個 imgRequest 建立一個新會話,因為我網頁上的許多影像都是動態生成的並且是臨時儲存的。 所以只有當我在同一個會話中發出請求時才能獲取這些影像。
答案
會話通常使用 cookie 工作。 如果您希望所有請求都屬於同一會話,則需要在請求之間保留 cookie。 為此,您可以建立一個 CookieContainer 並將其提供給每個 HttpWebRequest 物件。
這是您的程式碼更新為使用 CookieContainer:
void SaveUrl(string sourceURL, string savepath) { CookieContainer cookies = new CookieContainer(); HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(sourceURL); webRequest.CookieContainer = cookies; HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse(); StreamReader responseReader = new StreamReader(response.GetResponseStream()); string sResponseHTML = responseReader.ReadToEnd(); using (StreamWriter sw = new StreamWriter(savepath, false)) { sw.Write(sResponseHTML); } string[] ImageUrl = GetImgLinks(sResponseHTML); foreach (string imagelink in ImageUrl) { HttpWebRequest imgRequest = (HttpWebRequest)WebRequest.Create(imagelink); imgRequest.CookieContainer = cookies; HttpWebResponse imgresponse = (HttpWebResponse)imgRequest.GetResponse(); //Code to save image } }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70016198/viewspace-2885443/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20180906]測試同一會話多個子遊標是否快取.txt會話快取
- 同一個專案中的多個Spring Boot應用實現CQRS - itnextSpring Boot
- screen 命令示例:管理多個終端會話會話
- Qt中多個原始檔中呼叫同一引數或物件等QT物件
- 在 React 中管理同一元件的多個例項中的狀態React元件
- 在同一臺計算機中執行多個MySQL服務計算機MySql
- 處理多個會話時的 Cookie 和 Headers 複用問題會話CookieHeader
- 處理多個會話時的 Cookie 和 Headers複用問題會話CookieHeader
- 為何Binlog中同一個事務的event時間點會亂序?
- 同一個元素中有多個class,優先順序
- 同一頁面生成多個驗證碼
- postgresql中檢視建立,欄位拼接,同一個表的多行之間的多個欄位相減SQL
- 資料庫會話數量過多,定期清理inactive會話資料庫會話
- 二十國集團的政策重點:同一個地球,同一個家庭,同一個未來
- 如何在github同一個倉庫上傳多個專案Github
- Nginx同一個server部署多個靜態資源目錄NginxServer
- iOS 同一個workspace下建立多個專案程式設計iOS程式設計
- 同一欄位多個查詢條件時遇到的一個問題
- Laravel 啟用多個 work 對同一個佇列進行處理的時候是否會出現同步執行Laravel佇列
- opencv-python 讀取同一目錄的多個檔案OpenCVPython
- windows 系統下 workerman 在同一個執行視窗中開啟多個 websocket 服務WindowsWeb
- 如何把Electron做成一個Runtime,讓多個應用共享同一個Electron
- Oracle同一臺伺服器建立多個資料庫Oracle伺服器資料庫
- 將多個實體類集合寫入同一個 Excel 檔案的不同 Sheet 頁Excel
- 更好利用 tmux 會話的 4 個技巧UX會話
- mysql sql同一個欄位多個行轉成一個欄位查詢MySql
- 在同一頁面顯示多個JavaScript統計圖表JavaScript
- 手工電子面單-批量儲存同一個收貨地址的多個包裹資訊
- 當多個UITextView使用同一個UIView例項出現凍屏現象UITextView
- Eclipse通過EGit外掛提交多個專案到同一個倉庫EclipseGit
- RocketMQ同一個消費者唯一Topic多個tag踩坑經歷MQ
- php中關於會話機制的理解PHP會話
- 開啟一個jsf會話失效JS會話
- 如何透過 SAP ABAP OData $expand 操作在同一個 HTTP 請求中返回多個節點的資料試讀版HTTP
- 【YashanDB知識庫】繫結引數,同一個sql多個執行計劃的問題SQL
- python requests模組session的使用建議及整個會話中的所有cookie的方法PythonSession會話Cookie
- Spring Boot 中的同一個 Bug,竟然把我坑了兩次!Spring Boot
- 關於 Spring Boot 中建立物件的疑慮 → @Bean 與 @Component 同時作用同一個類,會怎麼樣?Spring Boot物件Bean