PHP curl请求返回false的几种原因

> 有的时候总会遇到一个“莫名其妙的问题”,复制链接明明能在浏览器上访问,而curl请求却总是返回false,下面来分析以下原因或解决方法。

如以下代码为例:

public function curlHttps($url, $postdata=array(), $timeOut=5, $header=array()){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    if ($header){
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    }
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeOut);
    if ($postdata){
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
    }
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    $output = curl_exec($ch);
    curl_close($ch);
    return $output;
}


1、请求https网址

请求地址是https的,需要curl_exec($ch);之前设置

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);


2、暂时无法发现问题
可直接在curl_exec($ch);之前加上

var_dump(curl_error($ch));

如果有问题即可直接打印出来。


3、curl请求链接含空格
这个是意外发现的,网上很多地方都没找到,还是无意中在对照了某某的api接口文档才发现的。
使用curl来请求数据时curl的url地址中的任何地方不能有空格存在,不然会返回一个你琢磨不透的false

比如: http://www.sanplit.cn/api/test?id=110&make=iPhone&model=iPhone 6s Plus中参数model中含有空格,curl请求false,而直接浏览访问有效,这时候只需要将空格替换成“+”即可。如:

str_replace(\' \', \'+\', $url)


暂时就发现这三种,有更多建议或疑问的欢迎留言,感谢!

PHP

我来吐槽

*

*