如何在R getURL中使用Tor socks5

时间:2013-07-29 13:21:53

标签: r curl proxy socks tor

我想在R. getURL函数中使用Tor。在socks5 port 9050工作(在Firefox中检查),html <- getURL("http://www.google.com", followlocation = T, .encoding="UTF-8", .opts = list(proxy = "127.0.0.1:9050", timeout=15)) 。但是当我在R中设置它时,我得到以下错误

{{1}}
  

curlPerform出错(curl = curl,.opts = opts,.encoding = .encoding):        '\ n \ nTor不是HTTP代理\ n \ n \ n

Tor不是HTTP代理

\ n

\ n您似乎已将Web浏览器配置为使用Tor作为HTTP代理。\ n这是不正确的:Tor是SOCKS代理,而不是HTTP代理。\ n请相应地配置您的客户端。

我尝试用socks,socks5替换代理,但它没有用。

4 个答案:

答案 0 :(得分:7)

curl bindings for R,之后您可以使用curl来调用Tor SOCKS5代理服务器。

来自shell的调用(可以转换为R绑定)是:

curl --socks5-hostname 127.0.0.1:9050 google.com

Tor也将为A记录执行DNS。

答案 1 :(得分:7)

RCurl将默认为HTTP代理,但Tor提供SOCKS代理。 Tor非常聪明,可以理解代理客户端(RCurl)正在尝试使用HTTP代理,因此Tor返回HTML中的错误消息。

为了获得RCurl和curl,使用SOCKS代理,您可以使用协议前缀,SOCKS5有两个协议前缀:&#34; socks5&#34;和&#34; socks5h&#34; (见the Curl manual)。后者将让SOCKS服务器处理DNS查询,这是使用Tor时的首选方法(事实上,如果让代理客户端解析主机名,Tor会发出警告)。

这是一个纯R解决方案,它将使用Tor进行dns查询。

library(RCurl)
options(RCurlOptions = list(proxy = "socks5h://127.0.0.1:9050"))
my.handle <- getCurlHandle()
html <- getURL(url='https://www.torproject.org', curl=my.handle)

如果您想指定其他参数,请参阅下面的放置位置:

library(RCurl)
options(RCurlOptions = list(proxy = "socks5h://127.0.0.1:9050",
                            useragent = "Mozilla",
                            followlocation = TRUE,
                            referer = "",
                            cookiejar = "my.cookies.txt"
                            )
        )
my.handle <- getCurlHandle()
html <- getURL(url='https://www.torproject.org', curl=my.handle)

答案 2 :(得分:2)

您好Naparst我真的很感激如何解决您提出的解决方案 选项应该是这样的: opts&lt; - list(socks5.hostname =“127.0.0.1:9050”) (这不起作用,因为socks5.hostname不是一个选项)

答案 3 :(得分:2)

在Mac OSX下安装Tor Bundle for MacPrivoxy,然后在系统偏好设置中更新代理设置。

'系统偏好设置' - &gt; 'Wi-FI' - &gt; '高级' - &gt; '代理' - &gt;设置'Web代理(HTTP)'Web代理服务器127.0.0.1:8118

'系统偏好设置' - &gt; 'Wi-FI' - &gt; '高级' - &gt; '代理' - &gt;设置'安全Web代理(HTTPS)'安全Web代理服务器127.0.0.1:8118 - &gt; '好' - &gt; '应用'

library(rcurl)
curl <- getCurlHandle()
curlSetOpt(proxy='127.0.0.1:9150',proxytype=5,curl=curl)
html <- getURL(url='check.torproject.com',curl=curl)