138

プロキシ サーバーを使用するように 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;
?> 
4

4 に答える 4

231

これは、バグが削除された作業バージョンです。

$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);返される変数を停止する 2 番目のエクストラを削除しました。プロキシ IP とポートを 1 つの設定に統合しました。

デフォルトのCURLOPT_HTTPPROXYTUNNELandも削除しました。CURLOPT_CUSTOMREQUEST

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

プロキシを無効にするには、null に設定するだけです。

curl_setopt($ch, CURLOPT_PROXY, null);

ご不明な点がございましたら、お気軽にお問い合わせください。私はcURL毎日仕事をしています。

于 2012-02-12T09:16:05.533 に答える
-2

これは、詳細な自明のコメントでプロジェクトに使用した、よくテストされた関数です


80 以外のポートがサーバー ファイアウォールによってブロックされている場合が多く、コードは localhost では正常に機能しているように見えますが、サーバーでは機能していないように見えます。

function get_page($url){

global $proxy;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
//curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_HEADER, 0); // return headers 0 no 1 yes
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // return page 1:yes
curl_setopt($ch, CURLOPT_TIMEOUT, 200); // http request timeout 20 seconds
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Follow redirects, need this if the url changes
curl_setopt($ch, CURLOPT_MAXREDIRS, 2); //if http server gives redirection responce
curl_setopt($ch, CURLOPT_USERAGENT,
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7");
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt"); // cookies storage / here the changes have been made
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // false for https
curl_setopt($ch, CURLOPT_ENCODING, "gzip"); // the page encoding

$data = curl_exec($ch); // execute the http request
curl_close($ch); // close the connection
return $data;
}
于 2013-10-21T06:49:13.150 に答える