如何在R getURL中使用Tor socks5

bar*_*nus 6 proxy curl r tor socks

我想getURL在R.函数中使用Tor.工作正常(在firefox中检查),socks5at port 9050.但是当我在R中设置它时,我得到以下错误

html <- getURL("http://www.google.com", followlocation = T, .encoding="UTF-8", .opts = list(proxy = "127.0.0.1:9050", timeout=15))
Run Code Online (Sandbox Code Playgroud)

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替换代理,但它没有用.

zki*_*bqi 7

Rcurl绑定,之后你可以使用curl来调用Tor SOCKS5代理服务器.

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

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

Tor也将为A记录执行DNS.


Han*_*and 7

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

为了获得RCurl和curl,使用SOCKS代理,您可以使用协议前缀,SOCKS5有两个协议前缀:"socks5"和"socks5h"(参见Curl手册).后者将让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)
Run Code Online (Sandbox Code Playgroud)

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

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)
Run Code Online (Sandbox Code Playgroud)