同一會話中的多個 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C#通過webRequest保持在同一Session中Post資料C#WebSession
- Android -- 與WEB互動在同一個會話Session中通訊AndroidWeb會話Session
- 在多個檔案中import同一個檔案,webpack會多次打包嗎ImportWeb
- [20180906]測試同一會話多個子遊標是否快取.txt會話快取
- nginx多個專案放在不同的tomcat中,共享同一個埠NginxTomcat
- screen 命令示例:管理多個終端會話會話
- Qt中多個原始檔中呼叫同一引數或物件等QT物件
- 在 React 中管理同一元件的多個例項中的狀態React元件
- oracle ora-60 deadlock發生在多個會話的情況Oracle會話
- oracle中會話的狀態Oracle會話
- 同一個專案中的多個Spring Boot應用實現CQRS - itnextSpring Boot
- 在同一臺計算機中執行多個MySQL服務計算機MySql
- 同一Tomcat下不同Web應用之間共享Session會話TomcatWebSession會話
- 同一環境下執行多個版本的GrailsAI
- 資料庫會話數量過多,定期清理inactive會話資料庫會話
- 處理多個會話時的 Cookie 和 Headers複用問題會話CookieHeader
- 處理多個會話時的 Cookie 和 Headers 複用問題會話CookieHeader
- 同一個元素中有多個class,優先順序
- 怎樣在同一系統中啟動多個TOMCAT薦Tomcat
- Qt中連線到同一signal的多個slots的執行順序問題QT
- 同一個SQL引發多個ORA-7445錯誤SQL
- 如何在同一視窗開啟多個ExcelExcel
- 如何在github同一個倉庫上傳多個專案Github
- Nginx同一個server部署多個靜態資源目錄NginxServer
- iOS 同一個workspace下建立多個專案程式設計iOS程式設計
- Laravel 啟用多個 work 對同一個佇列進行處理的時候是否會出現同步執行Laravel佇列
- 同一欄位多個查詢條件時遇到的一個問題
- windows 系統下 workerman 在同一個執行視窗中開啟多個 websocket 服務WindowsWeb
- ObjectStateManager 中已存在具有同一鍵的物件。ObjectStateManager 無法跟蹤具有相同鍵的多個物件Object物件
- 在bean為singleton的情況下,為什麼同一個applicationContext會獲取多個不同的bean例項??BeanAPPContext
- 更好利用 tmux 會話的 4 個技巧UX會話
- php中關於會話機制的理解PHP會話
- oracle實用sql(7)--單個會話或會話間statistics對比OracleSQL會話
- Oracle同一臺伺服器建立多個資料庫Oracle伺服器資料庫
- opencv-python 讀取同一目錄的多個檔案OpenCVPython
- 手工電子面單-批量儲存同一個收貨地址的多個包裹資訊
- 將多個實體類集合寫入同一個 Excel 檔案的不同 Sheet 頁Excel
- Jvm 重複載入同一個類的結果會怎麼樣?JVM