http - 在 AngleSharp.Io 中使用代理和标头
问题描述
我试图让 AngleSharp 同时使用代理和设置标题属性,如下所示:
var handler = new HttpClientHandler
{
Proxy = new WebProxy(ProxyMan.GetProxy()),
UseProxy = true,
PreAuthenticate = true,
UseDefaultCredentials = false
};
var requester = new DefaultHttpRequester();
requester.Headers["User-Agent"] = Tools.GetAgentString();
requester.Headers["Accept-Language"] = "en-US";
requester.Headers["Accept-Charset"] = "ISO-8859-1";
requester.Headers["Content-Type"] = "text/html; charset=UTF-8";
var config = Configuration.Default
.WithRequesters(handler)
.With(requester)
.WithTemporaryCookies()
.WithDefaultLoader();
var context = BrowsingContext.New(config);
var doc = await context.OpenAsync(Url);
当我添加 Header 请求者时,它停止了代理处理程序的工作。我知道 .WithRequesters() 和 .With() 之间存在一些冲突,但我找不到在同一个请求中执行这两个操作的正确语法。
谢谢。
解决方案
是的,我不确定你为什么同时使用两者。
- 这
DefaultHttpRequester
是来自 AngleSharp 的请求者,并WebClient
在下面使用 WithRequesters
来自 AngleSharp.Io 并添加了所有可用的请求者(包括HttpClientRequester
)WithDefaultLoader
如果尚未注册其他请求者,则将加载程序放入配置并注册默认 HTTP 请求者
我认为你想要做的应该是HttpClientRequester
直接使用。
var handler = new HttpClientHandler
{
Proxy = new WebProxy(ProxyMan.GetProxy()),
UseProxy = true,
PreAuthenticate = true,
UseDefaultCredentials = false,
UseCookies = false,
AllowAutoRedirect = false
};
var client = new HttpClient(handler);
client.DefaultRequestHeaders.Append("User-Agent", Tools.GetAgentString());
// ... and the others if you want, even though `content-type` etc. should / will be determined by AngleSharp
var config = Configuration.Default
.With(new HttpClientRequester(client))
.WithTemporaryCookies()
.WithDefaultLoader();
var context = BrowsingContext.New(config);
var doc = await context.OpenAsync(Url);