2017-03-16 31 views
-1

我正在尝试将OpenURI与代理和用户代理字符串一起使用。我购买了代理列表,以便在我的网站中使用。如何在OpenURI上使用代理

下面是一个例子:

@src = open(url, "User-Agent"=> @agent, 
    :proxy_http_basic_authentication => [ 
    "http://185.118.66.88:16506", "user", "password"]).read 

这就造成:

!!! 502 Bad Gateway 

我得到了一个免费代理,并用它和它的工作,所以我想这个问题可能是用户名或密码。

我试着从我卖给我的代理名单的公司那里得到的用户名和密码。

如果我尝试使用引入nokogiri我得到一个错误:

@src = Nokogiri::HTML(open(
    "http://google.com", 
    :proxy_http_basic_authentication => [ 
    "http://#{@proxy}", "user", "password"] 

syntax error, unexpected keyword_rescue, expecting ')' 
    rescue Exception => e 

我想创建一个类,并使用它的网页抓取,谷歌的实例。它很容易禁止网络抓取器,所以我会更改每个请求的用户代理和代理。

+0

这不是一个Nokogiri问题,因为Nokogiri不关心HTML来自哪里。它只读取由OpenURI传递给它的流。问题在于通过Proxy和OpenURI连接到最终主机。 –

+0

请阅读“[问]”和链接的页面。链接的页面将帮助您了解如何使用堆栈溢出。此外,“[mcve]”和链接页面将帮助您编写更有用的问题。您的代码示例在语法上不正确,也不会显示代码中的“rescue”,因此我们无法帮助诊断。 –

+0

您无法编写通用刮板来在多个站点上使用。网站之间的HTML不够一致以允许这样做。 Google不会因为更改代理或用户代理设置而被愚弄;他们了解自动抓取如何非常好地工作。 –

回答

0

我希望你从得到502目标网站

require 'open-uri' 
@src = open("http://google.com", 
      "User-Agent"=> 'Agent', 
      proxy_http_basic_authentication: [ 
       "http://185.118.66.88:16506", "user", "password"]).read 

#⇒ OpenURI::HTTPError: 407 Proxy Authentication Required 

这意味着一切都按预期进行。您尝试使用Nokogiri需要两个右括号才能工作,但您最好从简单的open工作开始,但Nokogiri仍然依赖它。

+0

好的,但我们先讨论open-url。第二。你可以与用户代理和代理共享Nokogiri的工作示例吗?(如果代理将要求用户名和密码,但没有好的话,会更好)? –