关于在 PHP 中 CURL 远程获取网页数据的问题.

关于在 PHP 中 CURL 远程获取网页数据的问题.
需要抓取词典的内容 ,本地测试可以 但是放在服务器上就返回 FALSE .

看到之前有人提出相关问题 https://segmentfault.com/q/10...
但是加上了 CURLOPT_USERAGENT 还是无效 大神帮忙看看

<?php
function curl_get_contents($url, $timeout = 15) { 

    // dump($url);
    $curlHandle = curl_init(); 
    curl_setopt( $curlHandle , CURLOPT_URL, $url ); 
    curl_setopt( $curlHandle , CURLOPT_RETURNTRANSFER, 1 ); 
    curl_setopt($curlHandle, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书和hosts
    curl_setopt($curlHandle, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($curlHandle,CURLOPT_USERAGENT,"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)");
    curl_setopt( $curlHandle , CURLOPT_TIMEOUT, $timeout ); 
    // dump(curl_error($curlHandle));

    // dump($curlHandle);
    $result = curl_exec( $curlHandle ); 
    curl_close( $curlHandle ); 
    return $result; 
} 


$url = "https://www.ldoceonline.com/dictionary/january";


    $html = curl_get_contents($url, 60);

    var_dump($html);

?>
阅读 3.8k
5 个回答

经过查询是 SSL 的问题 经phpinfo比对后发现 可用的服务器 curl 是openssl ,不可用的curl 是nss 默认服务安装的是 nss .

图片描述

图片描述

我看了下你写的请求没什么问题,你把 USERAGENT 换成 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36

应该是网站内部的限制,curl 请求就正常模拟 pc 端访问时的头部与参数,大部分时没啥问题的。

是不是服务器环境不支持访问外网啊,既然是返回FALSE,那应该是curl_exec函数执行失败了,先用curl_errno函数查看下错误码是什么,这样才好方便定位问题

谢邀。首先,我看到有注释的dump存在,说明你曾经想断点打印信息,我个人比较喜欢使用error_log函数将调试信息打印在文件中,然后使用tail -f来监控输出。这样不中断程序执行,效果也更实时。
然后,对于你的问题,信息确实有点少,建议你把curl_getinfo的信息打印出来看看

你服务器上面有没有安装crul扩展?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏