2011-03-06 86 views
96

我正在設置curl以使用代理服務器。該網址是由html表單提供的,這並不是問題。沒有代理,它工作正常。我在這個網站和其他網站上找到了代碼,但它們不起作用。任何幫助找到正確的解決方案將不勝感激。我覺得波紋管很接近,但我錯過了一些東西。謝謝。如何通過代理使用CURL?

波紋管代碼我適應從這裏http://www.webmasterworld.com/forum88/10572.htm但它在線返回有關失蹤T_VARIABLE的錯誤消息12

<? 

$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); 
?> 

波紋管是從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; 
?> 

目前住在鵜鶘-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; 
?> 
+2

你缺少第12行 – 2011-03-06 16:56:30

+0

還,您需要更改$網址分號= '$ _ POST [1]' 到$ URL = $ _ POST [1] - 否則,$ URL將是一個字符串,而不是你想要的網址 – yoavmatchulsky 2011-03-06 17:06:21

+0

此外,$ _POST數組中的鍵是一個字符串,不是一個整數,所以你希望它說'$ _POST ['1']' – fiiv 2011-03-06 17:20:24

回答

182

這是一個工作版本,您的錯誤被刪除。

$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);這將停止返回的變量。 我將您的代理IP和端口合併爲一個設置。

我也刪除了CURLOPT_HTTPPROXYTUNNELCURLOPT_CUSTOMREQUEST,因爲它是默認值。

如果您不想返回標題,請註釋掉CURLOPT_HEADER

要禁用代理,只需將其設置爲空。

curl_setopt($ch, CURLOPT_PROXY, null); 

任何問題隨時問,我每天與cURL一起工作。

+0

很高興知道您每天使用CURL。我嘗試設置一個襪子代理,它在我的本地機器上工作,但不能在我的Linux專用服務器上工作。任何想法 ? – 2013-01-31 09:44:20

+0

@coding_idiot出於安全原因,大多數網絡主機都阻止不是80或443的端口。 – sousdev 2013-09-27 14:39:15

+0

雖然我已經解決了。我相信其他人會從中受益。 – 2013-09-27 19:03:27

-1

這裏是一個很好的測試功能,我用我的項目有詳細的自我解釋的意見


有些時候不是80端口是由服務器防火牆阻擋,似乎工作的代碼多次罰款本地主機,但不在服務器上

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; 
} 
+1

這幫了我:curl_setopt($ ch,CURLOPT_SSL_VERIFYPEER,false); // https爲 – villamejia 2016-12-22 22:11:17