ITPub博客

首页 > 应用开发 > Html/css > 同一会话中的多个 WebRequest

同一会话中的多个 WebRequest

Html/css 作者:itchaindev 时间:2022-04-02 06:00:13 0 删除 编辑

问题

我正在尝试编写一个将网页(及其图像)保存为 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博客 ” ,链接:https://blog.itpub.net/70016198/viewspace-2885443/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2022-04-02

  • 博文量
    12
  • 访问量
    3420