在.NET Core/UWP中为单个HTTP请求设置自定义WebProxy
我需要一个简单的HTTP GET请求来使用自定义代理。我不是说在这里获取Windows默认代理设置,而是自定义设置 在Xamarin Android应用程序中,以下代码确实有效:在.NET Core/UWP中为单个HTTP请求设置自定义WebProxy,.net,xamarin,win-universal-app,uwp,.net-core,.net,Xamarin,Win Universal App,Uwp,.net Core,我需要一个简单的HTTP GET请求来使用自定义代理。我不是说在这里获取Windows默认代理设置,而是自定义设置 在Xamarin Android应用程序中,以下代码确实有效: string myProxy = "100.100.100.100:7777"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri("http://my_uri")); request.Proxy = new WebProxy(myPr
string myProxy = "100.100.100.100:7777";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri("http://my_uri"));
request.Proxy = new WebProxy(myProxy, false);`
在Windows通用应用程序项目中,未实现类WebProxy
。因此,我按照这个答案创建了一个自定义实现:
我的代码是:
public class MyProxy : IWebProxy
{
public Uri GetProxy(Uri destination)
{
return new Uri("http://100.100.100.100:7777");
}
public bool IsBypassed(Uri host)
{
return false;
}
public ICredentials Credentials { get; set; }
}
然后
request.Proxy = new MyProxy();
但它不起作用。事实上,如果我在GetProxy
中设置断点,它甚至不会被命中。
它只是忽略代理设置并使用Windows 10默认设置。虽然我们可以在UWP应用程序中使用,但如果查看的版本信息,我们会发现此属性在UWP-like中也不可用。所以你的代码不起作用
在.NETCore/UWP中,System.NET.HttpWebRequest类位于System.NET.Requests库中
NET Core 5的API表面与Windows 8.1应用程序的API表面相同,与.NET Framework中的表面相比非常有限。这是有意为之的,我们强烈鼓励改为使用HttpClient API——这是我们未来精力和创新的重点
提供此库纯粹是为了向后兼容,并取消对使用这些旧API的.NET库的使用。对于.NETCore,HttpWebRequest的实现实际上是基于HttpClient的(与.NETFramework的依赖顺序相反)。如上所述,这样做的原因是为了避免在UWP应用程序上下文中使用托管的.NET HTTP堆栈,并将HttpClient作为.NET开发人员的单一HTTP客户端角色API
有关更多信息,请参阅
对于HttpClient:
对于这两个API,代理设置都是从Internet Explorer/Microsoft Edge设置自动获得的,默认情况下用于所有HTTP调用。这使得应用程序能够自动工作,即使用户通过代理连接到互联网这两种API都不提供为应用程序指定自定义代理的方法。但是,您可以通过将HttpClientHandler.UseProxy设置为false(对于System.Net.Http)或将HttpBaseProtocolFilter.UseProxy设置为false(对于Windows.Web.Http)来选择不使用默认代理
有关更多信息,请参阅
因此,我们现在无法对单个HTTP请求使用自定义代理。但欢迎您在上投票请求此功能