プロキシ経由でCURLを利用するには?
プロキシサーバーを使用するようにcurlを設定したいと考えています。URLはHTMLフォームで提供されており、これまで問題はありませんでした。プロキシを使わない場合は問題なく動作します。このサイトや他のサイトでコードを見つけましたが、動作しません。正しい解決策を見つけるための手助けをしていただけると大変助かります。下記の方法が近いような気がしますが、何か足りないような気がします。ありがとうございました。
ここから引用した下記のコード http://www.webmasterworld.com/forum88/10572.htm しかし、12行目でT_VARIABLEがないというエラーメッセージが返されます。
<?
$url = '$_POST[1]';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 0);
curl_setopt($ch, CURLOPT_PROXY, '66.96.200.39:80');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST,'GET');
curl_setopt ($ch, CURLOPT_HEADER, 1)
curl_exec ($ch);
$curl_info = curl_getinfo($ch);
curl_close($ch);
echo '<br />';
print_r($curl_info);
?>
以下のコードは https://stackoverflow.com/questions/4802816/curl-through-proxy-returns-no-content からの引用です。
<?
$proxy = "66.96.200.39:80";
$proxy = explode(':', $proxy);
$url = "$_POST[1]";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXY, $proxy[0]);
curl_setopt($ch, CURLOPT_PROXYPORT, $proxy[1]);
curl_setopt($ch, CURLOPT_HEADER, 1);
$exec = curl_exec($ch);
echo curl_error($ch);
print_r(curl_getinfo($ch));
echo $exec;
?>
は、現在pelican-cement.comで公開されていますが、こちらも動作しません。
更新しました。 ご協力ありがとうございます。上記のように変更しました。今では真っ白な画面しか返ってきません。
<?
$url = $_POST['1'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 0);
curl_setopt($ch, CURLOPT_PROXY, '66.96.200.39:80');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST,'GET');
curl_setopt ($ch, CURLOPT_HEADER, 1);
curl_exec ($ch);
$curl_scraped_page = curl_exec($ch);
curl_close($ch);
echo $curl_scraped_page;
?>
119
3
これは、あなたのバグを取り除いた動作バージョンです。
CURLOPT_PROXYUSERPWD
を追加して、ユーザー名とパスワードを必要とするプロキシがある場合に備えました。 CURLOPT_RETURNTRANSFER
を1にして、データが$curl_scraped_page
変数に返されるようにしました。curl_exec($ch);
は、変数が返されるのを止めるため、2番目に余分な
curl_exec($ch);`を削除しました。 プロキシのIPとポートを一つの設定にまとめました。また、
CURLOPT_HTTPPROXYTUNNEL
とCURLOPT_CUSTOMREQUEST
はデフォルトだったので削除しました。ヘッダーを返して欲しくない場合は、
CURLOPT_HEADER
をコメントアウトしてください。プロキシを無効にするには、単にそれをnullに設定します。
私は毎日
cURL
を使って仕事をしているので、質問があれば気軽に聞いてください。CURL PROXYに必要な様々なCURLオプションの使い方を説明しました。
ここでは、私のプロジェクトで使用したテスト済みの関数を、詳細な自己解説付きでご紹介します。
80以外のポートがサーバーのファイアウォールでブロックされている場合が多いので、このコードはローカルホストでは問題なく動作しているように見えますが、サーバーでは動作していません。