file_get_contents melalui tor

Jadi, saya mencari cara untuk menemukan judul halaman menggunakan php. Setelah meneliti selama 5 detik, saya menemukan jawabannya di sini:

        function get_title($url){
        $str = file_get_contents($url);
        if(strlen($str)>0){
          $str = trim(preg_replace('/\s+/', ' ', $str)); 
          preg_match("/\<title\>(.*)\<\/title\>/i",$str,$title); 
          return $title[1];
        }
      }

Tapi saya membutuhkannya melalui Tor Proxy, jadi penelitian 5 detik di situs ini dan kebijaksanaan Anda, saya menemukan:

        $aContext = array(
        'http' => array(
            'proxy' => 'proxy:port',
            'request_fulluri' => true,
        )
    );

    $cxContext = stream_context_create($aContext);

Menyatukan semuanya, saya melakukan ini:

        $aContext = array(
        'http' => array(
            'proxy' => '127.0.0.1:9150',
            'request_fulluri' => true,
        )
    );

    $cxContext = stream_context_create($aContext);

    function get_title($url){
        global $cxContext;
        $str = file_get_contents($url, False, $cxContext);

        if(strlen($str)>0){
          $str = trim(preg_replace('/\s+/', ' ', $str));
          preg_match("/\<title\>(.*)\<\/title\>/i",$str,$title); 
          return $title[1];
        }
      }

echo get_title('http://' . $theonionurl);

Tapi, itu tidak berhasil. log menunjukkan:

Peringatan PHP: file_get_contents(http://the_onion_address_to_check.onion): gagal membuka aliran: Koneksi ditolak di /var/www /html/mychecker.php pada baris 44, referensi: http://my_onion_address.onion/mychecker.php

Saya mengubah port ke 9050, masih tidak berfungsi.

Apa yang saya lakukan salah???

(tentunya sudah saya periksa, url yang akan diperiksa valid dan dapat diakses melalui browser tor)


person Guy Dresher    schedule 15.06.2018    source sumber


Jawaban (2)


Apakah Tor terinstal dan berjalan di sistem Anda? Koneksi ditolak akan menunjukkan bahwa tidak ada yang mendengarkan pada port tersebut.

Anda harus menginstal dan menjalankan Tor terlebih dahulu sebelum dapat menggunakannya untuk terhubung ke situs.

Selain itu, port 9050 adalah proksi SOCKS, bukan proksi HTTP, oleh karena itu Anda tidak akan dapat menggunakannya dengan opsi konteks proksi aliran HTTP karena ini hanya berfungsi dengan proksi HTTP.

Sebaliknya, Anda harus menggunakan curl beserta opsi proksinya jika Anda ingin menggunakan Tor:

$ch = curl_init('http://example.onion/');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_PROXYTYPE      => CURLPROXY_SOCKS5_HOSTNAME,
    CURLOPT_PROXY          => '127.0.0.1:9050',
    CURLOPT_HEADER         => 0,
    CURLOPT_FOLLOWLOCATION => 1,
    CURLOPT_ENCODING       => '',
    CURLOPT_COOKIEFILE     => '',
]);

$response = curl_exec($ch);

if ($response === false) {
    echo sprintf(
        "Request failed.  Error (%d) - %s\n",
        curl_errno($ch),
        curl_error($ch)
    );
    exit;
}

if (preg_match('/<title>(.*)<\/title>', $response, $match)) {
    echo "The title is '{$match[1]}'";
} else {
    echo "Did not find title in page."
}
person drew010    schedule 17.06.2018
comment
Terima kasih! ikal berfungsi! [harus menginstalnya terlebih dahulu] - person Guy Dresher; 17.06.2018
comment
@Borna Port default masih 9050. 9150 digunakan oleh Tor Browser Bundle. - person drew010; 27.09.2018

$aContext Anda berada di luar fungsi.
Pindahkan ke dalam fungsi dan itu akan berfungsi.

function get_title($url){
    $aContext = array(
    'http' => array(
        'proxy' => '127.0.0.1:9150',
        'request_fulluri' => true,
    )
    );

    $cxContext = stream_context_create($aContext);

    $str = file_get_contents($url, False, $cxContext);

    if(strlen($str)>0){

      $str = trim(preg_replace('/\s+/', ' ', $str));
      preg_match("/\<title\>(.*)\<\/title\>/i",$str,$title); 
      return $title[1];
    }
  }

echo get_title('http://' . $theonionurl);

Tidak yakin tentang hal global itu.
Saya belum pernah menggunakannya dan menurut saya lebih aman dengan variabel lokal.

person Andreas    schedule 15.06.2018
comment
Tidak! Peringatan PHP: file_get_contents(the_onion_address_to_check.onion): gagal membuka aliran: Koneksi ditolak di /var/www/html/mychecker .php pada baris 109, referensi: my_onion_address.onion/mychecker.php masih. - person Guy Dresher; 16.06.2018