AgilityPack-维护多个HTTP请求的“连接”

时间:2019-03-13 10:34:33

标签: c# asp.net-core html-agility-pack

我有一个系统需要作为一个“作业”对API进行多次调用。 我通过主机名连接到代理以执行工作,因此它没有为我分配我可以看到的IP地址。我基本上是把任务交给了。

此刻,我正在使用HtmlWeb对我的URL列表进行呼叫,如下所示:

var webProxy = new WebProxy(Address: [MyProxyHost]);

var web = new HtmlWeb();
web.UseCookies = false;
web.UserAgent = "[MyUserAgent]";
var htmlDoc = web.Load("[URL]","GET", webProxy, webCreds);
//...do stuff with results...

问题:就目前而言,我提出的每个请求都会轮换代理(因为使用代理主机的每个“调用”都会随机更改其IP地址-我对此无能为力)。

我想做的是在多个调用中重复使用http请求/连接(我很可能无法为此使用HtmlWeb)。

所以我基本上会说:

  • 创建HTTP请求对象(带有代理主机)
  • 打开/初始化
  • 发出请求1
  • ...
  • 提出请求N
  • 关闭并处置

这可能吗?

1 个答案:

答案 0 :(得分:0)

好的,我已经准备好以下内容,并且到目前为止似乎还可以:

var webProxy = new WebProxy()
{
    Address = new Uri([ServerHost] + ":" + [ServerPort]),
    BypassProxyOnLocal = false,
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential(
        userName: [Username],
        password: [Password])
};

var httpClientHandler = new HttpClientHandler()
{
    Proxy = webProxy,
};

var _httpClient = new HttpClient(httpClientHandler);
...
var response = await _httpClient.GetAsync([Url]);
var pageContents = await response.Content.ReadAsStringAsync();

var htmlDoc.LoadHtml(pageContents);
...

这使用代理向每个URL发出请求,并将返回的页面转换为HtmlDocument,这样我就可以完成所需的AgilityPack。