首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >同一会话中的多个WebRequest

同一会话中的多个WebRequest
EN

Stack Overflow用户
提问于 2009-04-24 23:48:07
回答 1查看 29.4K关注 0票数 17

我正在试着写一个函数,保存一个网页(与其图像)为一个html页面。我正在使用HttpWebRequest请求网页的内容。我的函数看起来像这样

代码语言:javascript
复制
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
    }
}

我这里的问题是,我想在同一个会话中进行所有的网页请求,而不想为每个imgRequest创建一个新的会话,因为我网页上的许多图像都是动态生成的,并且是临时存储的。因此,只有当我在同一会话中发出请求时,才能获取这些图像。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-04-25 00:32:09

会话通常通过使用cookie来工作。如果您希望所有请求都是同一会话的一部分,则需要持久化请求之间的cookie。为此,您可以创建一个CookieContainer并将其提供给每个HttpWebRequest对象。

下面是更新后的代码,以使用CookieContainer:

代码语言:javascript
复制
    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
        }
    }
票数 35
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/787857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档