【问题标题】:CURLOPT_RETURNTRANSFER not returning responseCURLOPT_RETURNTRANSFER 不返回响应
【发布时间】:2012-12-11 06:44:45
【问题描述】:

我试图查询 Instagram API,但 CURLOPT_RETURNTRANSFER 似乎没有按预期的方式工作。 CURLOPT_RETURNTRANSFER 已设置为 true,但我没有得到响应,我得到的只是一个布尔值。从我读到的 CURLOPT_RETURNTRANSFER 到 true 我在下面这样做了。请指教。谢谢

public function __construct($uri) {
    $this->handler = curl_init($uri);
           $this->_setOptions();
}

protected function _setOptions() {
    curl_setopt($this->handler, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($this->handler, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($this->handler, CURLOPT_USERAGENT, self::DEFAULT_USER_AGENT);

}

public function getResponse() {
    $response = curl_exec($this->handler);
    curl_close($this->handler);
    return $response;
}

【问题讨论】:

    标签: php apache curl instagram


    【解决方案1】:

    您可以通过如下编写函数来解决它:

    protected function _setOptions() {
        curl_setopt($this->handler, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($this->handler, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($this->handler, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($this->handler, CURLOPT_USERAGENT, self::DEFAULT_USER_AGENT);
    }
    

    这样可以避免检查 ssl 协议。

    作为额外选项,您可以设置 CURLOPT_SSL_VERIFYHOST

    curl_setopt($this->handler, CURLOPT_SSL_VERIFYHOST, 0);
    

    建议在生产环境中始终在安全的 SSL 条件下工作,正如 docs 中提到的,应将 CURLOPT_SSL_VERIFYHOST 设置为 2 以确保安全的 SSL 连接。

    【讨论】:

    • 我认为这就是答案,即使主题来自 2012 年!
    【解决方案2】:

    你的布尔值是假的吗?

    如果它是假的,你一定有错误。

    在 curl_exec 行之后添加以下内容:

    if(curl_errno($this->handler)) 
    {
       echo curl_error($this->handler);
    }
    

    【讨论】:

    • 我收到的错误信息是:SSL 证书问题,验证 CA 证书是否正常。详细信息:错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败我正在尝试运行此 URL:api.instagram.com/v1/tags/nyp/media/… 它可以在浏览器上运行,但不能在应用程序上运行。有什么想法吗?
    【解决方案3】:

    你是在调用 new ClassName('http://someurl.com') 之后调用 getResponse() 方法吗?

    试试这个

    $x = new ClassName('http://www.google.com');
    var_export($x->getResponse();
    

    编辑:你也可以调用添加错误输出方法来查看是否发生了一些 curl 错误

    public function last_error() {
        echo curl_error($this->handler);
    }
    

    【讨论】:

      【解决方案4】:

      curl_exec($this->handler); 之后使用print_r(curl_getinfo($this->handler)); 找出问题所在。

      【讨论】:

        猜你喜欢
        • 2018-12-21
        • 1970-01-01
        • 2012-05-18
        • 2019-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-06
        • 1970-01-01
        相关资源
        最近更新 更多