我有一个系统需要作为一个“作业”对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)。
所以我基本上会说:
这可能吗?
答案 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。