如何通过代理使用CURL?
我期待设置curl使用代理服务器。 url是由html表单提供的,这一直没有问题。 没有代理,它工作正常。 我已经在这个和其他网站上find代码,但他们不工作。 任何帮助find正确的解决scheme将不胜感激。 我觉得下面的波纹pipe很近,但我错过了一些东西。 谢谢。
下面的代码我改编自http://www.webmasterworld.com/forum88/10572.htm,但它返回了关于第12行缺lessT_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); ?>
波纹pipe是通过代理退货没有内容的
<? $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; ?>
这是一个删除了错误的工作版本。
$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
variables。
我删除了第二个额外的curl_exec($ch);
这将停止返回的variables。 我将您的代理IP和端口合并为一个设置。
我也删除了CURLOPT_HTTPPROXYTUNNEL
和CURLOPT_CUSTOMREQUEST
因为它是默认的。
如果你不想返回头文件,注释掉CURLOPT_HEADER
。
要禁用代理,只需将其设置为空。
curl_setopt($ch, CURLOPT_PROXY, null);
任何问题都可以随意问,我每天都用cURL
工作。
我已经解释了使用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;
这是一个经过充分testing的function,我用我的项目与详细的自我解释评论
有很多时候,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; }