代码之家  ›  专栏  ›  技术社区  ›  joei

如何在HtmlAgilityPack中使用代理

  •  4
  • joei  · 技术社区  · 6 年前

    我需要使用带有HtmlAgilityPack的代理。 我提供指向我的应用程序的链接 RefURL . 之后,我希望应用程序从代理地址获取url。例如“101.109.44.157:8080”

    我搜索并发现:

    WebClient wc = new WebClient();
    wc.Proxy = new WebProxy(host,port);
    var page = wc.DownloadString(url);
    

    像这样使用它。

    RefURL = new Uri(refLink.Text);
    
    WebClient wc = new WebClient();
    wc.Proxy = new WebProxy("101.109.44.157:8080");
    var page = wc.DownloadString(RefURL);
    
    RefURL.ToString();
    HtmlWeb web = new HtmlWeb();
    HtmlAgilityPack.HtmlDocument doc = web.Load(RefURL.ToString());
    

    但它不起作用!

    1 回复  |  直到 3 年前
        1
  •  6
  •   derloopkat    2 年前

    代理IP没有响应,但您也没有在此代码行中传递web代理:

    HtmlAgilityPack.HtmlDocument doc = web.Load(RefURL.ToString());
    

    应该是:

    HtmlAgilityPack.HtmlDocument doc = web.Load(RefURL.ToString(),"GET", webProxy);
    

    第一步是找到 “刷新代理IP” 列表,例如:

    这些地址中的大多数可以工作几个小时。退房 how to set proxy IP in a browser . 如果代理是匿名的, this page 应该无法检测您的位置和IP。

    一旦您有了一个有效的代理IP和端口,您就可以创建webProxy对象,或者只需传递IP和端口。

    string RefURL = "https://www.whatismyip.com/";
    string myProxyIP = "119.81.197.124"; //check this is still available
    int myPort = 3128;
    string userId = string.Empty; //leave it blank
    string password = string.Empty;
    try
    {
        HtmlWeb web = new HtmlWeb();
        var doc = web.Load(RefURL.ToString(), myProxyIP, myPort, userId, password);
        Console.WriteLine(doc.DocumentNode.InnerHtml);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }