好问题
Good  Question
  • 首 页
  • 问题
    • PHP
    • JAVA
    • CPlusPlus
    • C#
    • SQL
  • 关 于
  • 联 系
如何通过代理服务器使用CURL工具? 关闭 返回上一级  

如何通过代理服务器使用CURL工具?
+ 查看更多

发布日期:2018-03-10 16:38
分类:PHP
浏览次数:301
我正在想通过设置curl使用代理服务器,网址是一个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 '
';
print_r($curl_info);
?>
还有下面这些代码是从问题 “通过代理使用CURL但却没有返回任何内容” 得到的
<?

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

回答

这是去掉你代码里的那些bug以后的一个正确版本:
$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_HTTPPROXYTUNNEL 和 CURLOPT_CUSTOMREQUEST 两项设置,因为它们都是默认选项。
如果你不想要返回的头部,可以把CURLOPT_HEADER的设置注释掉。
如果你不想用代理了,只要把它设置为null就行了。
你可以问我任何问题,因为我天天和cURL打交道。
上一篇如何将JavaScript变量传递给PHP?
在PHP中使用json_encode / json_decode将stdClass转化为数组下一篇
下一篇在PHP中使用json_encode / json_decode将stdClass转化为数组

最新文章

  • 函数`__construct`用来干嘛的
    发布日期:2018-03-26
  • 通过访客的IP得到他们的地区
    发布日期:2018-03-26
  • 合并两个PHP对象的最好的方法是什么?
    发布日期:2018-03-26
  • 该如何把一该如何把一个对象转化成数组?
    发布日期:2018-03-26
  • 什么是输出缓冲区?
    发布日期:2018-03-26
  • 在PHP中怎么把用逗号分隔的字符串分隔在一个数组里?
    发布日期:2018-03-26
  • 在PHP中使用foreach循环时查找数组的最后一个元素
    发布日期:2018-03-26
关于好问
收集整理一些有用的问题和回答,造福中国的程序旺和IT喵们!
友情链接
起飞页 
相关信息
版权声明
Copyright © 2016 - 2022  苏州卡达网络科技有限公司 备案号:苏ICP备09008221号