首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Tor网络爬虫

Tor网络爬虫
EN

Stack Overflow用户
提问于 2012-02-11 11:03:53
回答 6查看 18.1K关注 0票数 10

好的,这就是我需要的。我有一个基于PHP的网络爬虫。它可以在这里访问:http://rz7ocnxxu7ka6ncv.onion/现在,我的问题是我的爬虫需要在SOCKS端口9050上抓取页面。问题是,我必须通过Tor隧道它的连接,这样它才能解析.onion域,这就是我要索引的。(仅以.onion结尾。)我使用php crawl.php从命令行调用此脚本,并添加适当的参数来抓取页面。我的想法是:有没有办法强迫它使用Tor?或者我可以强制我的整个机器通过Tor进行隧道操作,以及如何实现?(比如强制所有流量通过127.0.0.1:9050)也许如果我设置了全局代理设置,php会尊重它们吗?

如果我的任何解决方案都有效,我该怎么做呢?(请按步骤说明,我是菜鸟。)

我只想创建我自己的Tor搜索引擎。(不要推荐我的p2p搜索引擎-这不是我想要的-我知道它们存在,我做了我的功课。)这是爬虫源代码,如果你有兴趣看看:也许有好心的人可以修改它,以使用127.0.0.1:9050对所有的爬虫请求?http://pastebin.com/kscGJCc5

EN

回答 6

Stack Overflow用户

发布于 2012-07-11 18:46:32

cURL也支持SOCKS连接;试试这个:

代码语言:javascript
运行
复制
<?php

$ch = curl_init('http://google.com'); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); 

// SOCKS5
curl_setopt($ch, CURLOPT_PROXY, 'localhost:9050'); 
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);

curl_exec($ch); 
curl_close($ch);
票数 10
EN

Stack Overflow用户

发布于 2012-02-11 12:58:07

除非我漏掉了什么,否则答案是肯定的,还有Tor网站上的here is some documentation。这些说明非常具体。虽然我没有将Tor设置为代理,但这是我考虑过的事情,这是我想要开始的地方。

编辑:在Linux上设置Tor并将其用作代理是非常简单的,正如文档所建议的那样。

代码语言:javascript
运行
复制
sudo apt-get install tor
sudo /etc/init.d/tor start

netstat -ant | grep 9050 # verify Tor is running

现在,在查看了操作代码之后,我们看到了对file_get_contents.的调用虽然最简单的方法一开始使用,但当您想要开始参数化请求时,file_get_contents会变得很麻烦,因为您必须使用stream contexts

第一个建议是转向curl,但同样,为了真正回答这个问题,阅读更多关于SOCKS如何使用HTTP的文章是有问题的……但要从技术上回答这个问题,如何向本地主机上的Tor SOCKS代理发送HTTP请求,还是很简单的。

代码语言:javascript
运行
复制
<?php  
$ch = curl_init('http://google.com'); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); 
curl_setopt($ch, CURLOPT_PROXY, 'https://127.0.01:9050/'); 
curl_exec($ch); 
curl_close($ch);

但是Tor告诉了我们什么呢?

HTTP/1.0 501 Tor不是

代理

Content-Type: text/html;charset=iso-8859-1

基本上,是关于SOCKS和HTTP的learn more。另一种选择是搜索PHP SOCKS客户端。快速检查一下就会发现,a library声称可以通过SOCKS发送HTTP请求。

编辑:

好了,再编辑一次!在写完上一篇文章几秒钟后,我找到了一种方法。This article向我们展示了如何设置Privoxy,它将SOCKS请求转换为HTTP请求。把它放在Tor和blamo前面,我们通过Tor发送代理的HTTP请求!

票数 9
EN

Stack Overflow用户

发布于 2014-01-25 20:27:53

您必须通过使用"dnsport“指令配置tor来拦截来自php脚本的dns查找请求。然后你必须为tor配置一个“传输”和一个“虚拟网络地址”。现在,当您的php脚本通过tor执行dns查找时发生的情况是,tor看到一个请求洋葱地址的请求,并使用"virtualnetworkaddress“范围内的ip地址进行响应。现在,您必须将去往此地址的流量重定向到使用"transport“定义的地址。阅读"torrc“手册中的"automaphostonresolve”、"virtualnetworkaddress“、"dnsport”和"transport“。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9237477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档