1

私がやりたいのは、ajax を使用してウィキペディアからデータを取得することです。クライアント側のスクリプトは後回しにして、ランダムなコンテンツを取得してみました。fopen() および fread() メソッドを試してみましたが、うまくいきませんでした。その後、プロキシを使用するインターネット プロバイダーのコードを含む記事を見つけました。私の場合なので、以下のコードを試しましたが、応答がありませんでした。

<?php
$opts = array('http' => array('proxy' => 'tcp://10.10.10.101:8080', 'request_fulluri' => true));
$context = stream_context_create ($opts);
$data = file_get_contents('http://www.php.net', false, $context);   
echo $data;
?>

わかりましたので、適切なプロキシ値を使用して、提案されたコードを試しました:

<?php


$url = 'http://www.php.net';
$proxy = '10.10.10.101:8080';
//$proxyauth = 'user:password';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
//curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
$curl_scraped_page = curl_exec($ch);
curl_close($ch);

echo $curl_scraped_page;

しかし、それは私にこのエラーを与えます: HTTP/1.0 403 Forbidden Date: Mon, 02 Jul 2012 09:41:20 GMT Server: Apache Content-Type: text/plain 宛先ホストは禁止されています

なぜうまくいかないのか、どうすれば問題を解決できるのかわかりません。

4

2 に答える 2

2

ブラウザではなくサーバーからデータをロードしているため、実際にはクロスドメインの問題ではありません。

プロキシ経由で PHP から Web ページをロードするには、cURL (PHP http クライアント: http://php.net/manual/en/book.curl.php ) を使用するのが最適です。

以下に例を示します - 同様の質問 (http://stackoverflow.com/questions/5211887/how-to-use-curl-via-a-proxy) から取得したものです。

<?php


$url = 'http://www.php.net';
$proxy = '10.10.10.101:8080';
//$proxyauth = 'user:password';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
//curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
$curl_scraped_page = curl_exec($ch);
curl_close($ch);

echo $curl_scraped_page;

プロキシに認証が必要な場合 - $proxyauth 変数を設定できます...

于 2012-07-01T12:37:50.780 に答える
2

自分のプロキシ アドレスを使用してコードをテストしたところ、動作しました。

<?php
    $url = 'http://www.php.net';
    $proxy = '192.168.4.200:3128';
    //$proxyauth = 'user:password';

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_PROXY, $proxy);
    //curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    $curl_scraped_page = curl_exec($ch);
    curl_close($ch);

    echo $curl_scraped_page;
?>

したがって、あなたが見ているのはおそらくプロキシ自体であり、(一部またはすべての外部?) サイトへのアクセスを許可していません。おそらく、必要なのはプロキシで認証することだけです。

これはおそらく、ネットワーク管理者に確認してもらうまで、get_contents、curl、fsockopen、またはその他の方法でこれを行うことができないことを意味します。

于 2012-07-02T11:51:57.733 に答える