HttpClient如何做代理连接以绕过地理阻止站点C#

时间:2018-11-06 09:21:55

标签: c# dotnet-httpclient

我正在尝试使用HttpClient通过这段代码连接到代理。 我想严格使用HttpClient或如果无法连接到代理。只要完成任务,就可以使用任何c#库。

        HttpClientHandler handler = new HttpClientHandler();
       //setup web proxy and credentials
        var webproxy = 
            new WebProxy("94.232.55.98", 8080)//ip and port number
        {
            UseDefaultCredentials = false,
            Credentials = CredentialCache.DefaultCredentials
        };

        handler = new HttpClientHandler
        {
            Proxy = webproxy,
            UseProxy = true,
            PreAuthenticate = true,
            UseDefaultCredentials = false
        };

        container = new CookieContainer();
        handler.CookieContainer = container;
        handler.UseCookies = true;
        client = new HttpClient(handler);
        //Query a url and get its contents, but the request was not using any proxy seemingly
        HttpResponseMessage responseMessage = client.GetAsync("https://shop.shoprite.com/").Result;

在查看代码时,我需要有关如何将httpclient连接到AU代理以及如何获得具有或不具有凭据的代理并使它们一起工作的指导。

我正在尝试访问仅在澳大利亚被阻止的网站,这就是为什么我尝试使用代理的原因。

谢谢!

编辑:

我已经从此站点检索了代理(正在查看AU代理) https://free-proxy-list.net/,我得到第一个IP并将其放在WebProxy上,以8080作为端口号为例enter image description here

但它似乎不起作用。

当我要请求该网站时,我遇到这样的错误,即访问一个除澳大利亚以外其他任何地方都受到地理封锁的网站。

enter image description here

1 个答案:

答案 0 :(得分:0)

看起来您的代码是正确的,但是您尝试连接的主机无法通过您尝试使用的代理访问。通过更改最后几行以使用EnsureSuccessStatusCode方法,可以获得更有用的错误消息。如果状态代码不是2XX,则会抛出异常。

using (var client = new HttpClient(handler))
using (var responseMessage = await client.GetAsync("http://shop.shoprite.com/"))
{
    responseMessage.EnsureSuccessStatusCode();
    responseMessage.Dump();
}