web-dev-qa-db-ja.com

プロキシ経由で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);
?>

怒鳴るのは プロキシを介したカールはコンテンツを返さない

<?

$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;
?> 
114
user586011

バグを削除した作業バージョンです。

$url = 'http://dynupdate.no-ip.com/ip.php';
$proxy = '127.0.0.1:8888';
//$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;

プロキシのいずれかでユーザー名とパスワードが必要な場合に備えて、CURLOPT_PROXYUSERPWDを追加しました。 CURLOPT_RETURNTRANSFERを1に設定して、データが$curl_scraped_page変数に返されるようにします。

返される変数を停止する余分なcurl_exec($ch);をもう1つ削除しました。プロキシIPとポートを1つの設定に統合しました。

また、CURLOPT_HTTPPROXYTUNNELCURLOPT_CUSTOMREQUESTもデフォルトとして削除しました。

ヘッダーを返したくない場合は、CURLOPT_HEADERをコメントアウトしてください。

プロキシを無効にするには、nullに設定します。

curl_setopt($ch, CURLOPT_PROXY, null);

どんな質問でも気軽に聞けます。私は毎日cURLで働いています。

207
GravyCode

CURL PROXYに必要なさまざまなCURLオプションの使用について説明しました。

$url = 'http://dynupdate.no-ip.com/ip.php';
$proxy = '127.0.0.1:8888';
$proxyauth = 'user:password';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);         // URL for CURL call
curl_setopt($ch, CURLOPT_PROXY, $proxy);     // PROXY details with port
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth);   // Use if proxy have username and password
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); // If expected to call with specific PROXY type
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);  // If url has redirects then go to the final redirected URL.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);  // Do not outputting it out directly on screen.
curl_setopt($ch, CURLOPT_HEADER, 1);   // If you want Header information of response else make 0
$curl_scraped_page = curl_exec($ch);
curl_close($ch);

echo $curl_scraped_page;
27
Somnath Muluk