10

わかりました、これが私が必要とするものです。PHP ベースの Web クローラーを使用しています。ここからアクセスできます: http://rz7ocnxxu7ka6ncv.onion/ さて、私の問題は、実際にページをクロールするスパイダーが SOCKS ポート 9050 でクロールする必要があることです。私が索引付けしているものである.onionドメインを解決できます。(末尾が .onion のみです。) このスクリプトをコマンド ラインから php crawl.php を使用して呼び出し、ページをクロールするための適切なパラメーターを追加します。これが私が思うことです:Torを強制的に使用する方法はありますか? または、マシン全体に強制的に Tor を通過させることはできますか? (すべてのトラフィックを強制的に 127.0.0.1:9050 に通すように) おそらく、グローバル プロキシ設定をセットアップすると、php はそれらを尊重するでしょうか?

私の解決策のいずれかが機能する場合、どうすればよいですか? (ステップバイステップの指示をお願いします、私は初心者です。)

独自の Tor 検索エンジンを作成したいだけです。(私の p2p 検索エンジンはお勧めしません。これは私が求めているものではありません。それらが存在することは知っています。宿題をしました。) 興味のある方は、クローラーのソースをご覧ください。すべてのクロール要求に 127.0.0.1:9050 を使用するように変更できますか? http://pastebin.com/kscGJCc5

4

6 に答える 6

10

cURLはSOCKS接続もサポートしています。これを試して:

<?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);
于 2012-07-11T10:46:31.867 に答える
-2

HTTP プロキシを所有するだけです。

<?php

/**
* Proxy script that performs any HTTP request requested.
*/

// Check key
$key = 'YOUR_API_KEY';
if($_GET['key'] != $key) die; // Check for the API key

// Check URL
$url = isset($_GET['url']) ? trim(base64_decode($_GET['url'])) : '';
if(!$url || !filter_var($url, FILTER_VALIDATE_URL)) die; // Incorrect URL

class MyCurl {

    /**
    * CURL resource link
    * 
    * @var resource
    */
    protected $resource;

    /**
    * Constructor
    * 
    * @param String $host
    * @return MyCurl
    */
    public function __construct($url = 'localhost'){
        $this->resource = curl_init();
        $this->setUrl($url);
        $this->setOptions(array(
//          CURLOPT_RETURNTRANSFER => TRUE,
            CURLOPT_AUTOREFERER => TRUE,
            CURLOPT_FOLLOWLOCATION => TRUE,
            CURLOPT_REFERER => 'http://www.google.com/',
            CURLOPT_USERAGENT => 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)',
            CURLOPT_SSL_VERIFYHOST => FALSE,
            CURLOPT_SSL_VERIFYPEER => FALSE,
        ));
    }

    /**
    * Set URL for the next request
    * 
    * @param String $url
    */
    public function setUrl($url = 'localhost') {
        $this->setOption(CURLOPT_URL, $url);
    }

    /**
    * Sets option to the CURL resource.
    * See http://www.php.net/manual/en/function.curl-setopt.php for option description
    * 
    * @param int $name Option identifier
    * @param mixed $value Option value
    * @return Crawler_Curl Returns itself for sugar-code
    */
    public function & setOption($name, $value){
        curl_setopt($this->resource, $name, $value);
        return $this;
    }

    /**
    * Sets multiple CURL options at once
    * 
    * @param array $options Associative array of options
    * @return Crawler_Curl Returns itself for sugar-code
    */
    public function & setOptions($options){
        curl_setopt_array($this->resource, $options);
        return $this;
    }

    /**
    * Set User-Agent header of the browser
    * 
    * @param String $useragent Defaults to Mozilla browser
    */
    public function setUserAgent($useragent = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0') {
        $this->setOption(CURLOPT_USERAGENT, $useragent);
    }

    /**
    * Get curl request info
    * 
    * @array
    */
    public function info() {
        return curl_getinfo($this->resource);
    }

    /**
    * Return sent headers if CURLINFO_HEADER_OUT option was enabled
    * 
    * @return String Headers
    */
    public function headersSent() {
        return curl_getinfo($this->resource, CURLINFO_HEADER_OUT);
    }

    /**
    * Executes CURL request
    *
    * @return mixed Returns CURL execution result
    */
    public function execute(){
        return curl_exec($this->resource);
    }

    /**
    * Cleans CURL connection
    */
    function __destruct(){
        curl_close($this->resource);
    }

}

$curl = new MyCurl($url);
$curl->execute();
于 2013-07-30T15:07:14.343 に答える