我正在研究一个PHP脚本,它将请求发送到我们学校的服务器,以获得有关不同课程的课程大小的实时信息.当我不使用代理时,脚本运行完全正常,返回一个充满课程编号和可用座位的字符串.但是,我想为学生提供这项服务,我担心如果我提出太多请求,我的IP将被阻止.所以我试图通过代理执行此操作,但没有成功.只要我将CURLOPT_HTTPPROXYTUNNEL和CURLOPT_PROXY字段添加到我的请求中,就不会返回任何内容.由于我没有收到任何类型的错误消息,我甚至不确定如何对此进行故障排除.有谁知道发生了什么或至少如何解决它?
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$proxy = explode(':', $proxy);
curl_setopt($ch, CURLOPT_PROXY, $proxy[0]);
curl_setopt($ch, CURLOPT_PROXYPORT, $proxy[1]);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, 'tempcookie.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'tempcookie.txt');
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_REFERER, $ref);
$exec = curl_exec($ch);
echo curl_error($ch);
print_r(curl_getinfo($ch));
echo $exec;
Run Code Online (Sandbox Code Playgroud)
用于测试的代理: 75.147.173.215:8080
您可以设置 CURLOPT_STDERR 和 CURLOPT_VERBOSE卷曲选项以将错误保存在文件中。另外,您可以使用curl_error()函数。顺便说一句,默认情况下,curl 应该显示 STDERR 中的所有错误。
此外,对于一般检查,您可以简单地在浏览器配置属性中指定选定的代理,尝试在浏览器中打开特定服务并查看是否返回正确的响应。
更新:
CURLOPT_HTTPPROXYTUNNEL 用于使curl在请求代理服务器时调用CONNECT HTTP方法(详细信息请参见此处)。我测试了没有此选项的代码 - 它工作成功。
我使用的代码:
$proxy = "75.147.173.215:8080";
$proxy = explode(':', $proxy);
$url = "http://google.com";
$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;
Run Code Online (Sandbox Code Playgroud)