【问题标题】:Multiple WebRequest in same session同一会话中的多个 WebRequest
【发布时间】:2010-10-21 17:34:39
【问题描述】:

我正在尝试编写一个将网页(及其图像)保存为 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 创建一个新会话,因为我网页上的许多图像都是动态生成的并且是临时存储的。所以只有当我在同一个会话中发出请求时才能获取这些图像。

【问题讨论】:

    标签: c# asp.net html


    【解决方案1】:

    会话通常使用 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
            }
        }
    

    【讨论】:

    • 如果 imgRequest 和 webRequest 是同一个变量,它也可以工作。非常感谢您的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    相关资源
    最近更新 更多