【问题标题】:PHP's cURL: How to connect over HTTPS?PHP 的 cURL:如何通过 HTTPS 连接?
【发布时间】:2010-02-21 14:40:40
【问题描述】:

我需要使用常规 URL 编码查询字符串向 EC2 查询 API 发出简单的 GET 请求。协议是 HTTPS。我将如何在 PHP 的 cURL 的帮助下发送请求。

【问题讨论】:

    标签: php


    【解决方案1】:

    例子:

    $url = "https://example.com";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,  2);
    
    $result = curl_exec($ch);
    curl_close($ch);
    
    print_r($result);
    

    CURLOPT_SSL_VERIFYPEER

    检查对等证书是否有效或无效/过期。

    CURLOPT_SSL_VERIFYHOST引用php manual

    1 检查是否存在共同点 SSL 对等证书中的名称。 2到 检查是否存在通用名称 并验证它是否匹配 提供主机名。

    【讨论】:

    • 您能描述一下为什么需要 SSL_VERIFYPEER 和 SSL_VERIFYHOST 吗?
    【解决方案2】:

    就 PHP 代码而言,通过 curl 向 HTTPS URL 发送请求本身并不难。

    这样的事情应该做得很好(我刚刚在我的机器上尝试了这部分代码,Windows,PHP 5.3)

    $url = 'https://.../...';
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,  2);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $data = curl_exec($ch);
    curl_close($ch);
    
    echo $data;
    

    它输出结果很好:当我尝试访问 https:// URL 时,我在浏览器中得到了同样的结果;当然,CSS 除外。


    您可能想查看curl_setopt 函数的手册页:有很多选项,其中一些可能对您的特定情况有用:-)

    在这里,我使用了 CURLOPT_SSL_VERIFYPEERCURLOPT_SSL_VERIFYHOST ;不确定你是否需要亚马逊的那些,但我不得不使用它们,否则这部分代码不起作用——但这可能与我使用的证书是自签名的事实有关......尝试使用和不使用它们,您会很快发现是否需要它们。

    【讨论】:

    • @Sarfraz > 呃,该死的复制粘贴 (我从浏览器中复制粘贴了一个 URL,但没有注意到它没有像以前在我以前的服务器上那样添加“s” ) ;;我已经编辑了我的答案以纠正它;;感谢您的评论:-)
    【解决方案3】:

    如果您想将 CURL 配置为盲目接受证书,您可以将 CURLOPT_SSL_VERIFYPEER 选项设置为 false。

    $url = 'https://www.example.com/abc';
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    // Blindly accept the certificate
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    
    $response = curl_exec($ch);
    curl_close($ch);
    
    var_dump($response);
    

    【讨论】:

      【解决方案4】:

      您还可以使用 Zend Framework 和 cURL 适配器来帮助完成这项任务。详情here

      【讨论】:

        【解决方案5】:

        此代码可用于检索 https 请求

        $ch = curl_init();
        
        curl_setopt($ch, CURLOPT_URL,'https://serverurl.com/');
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($data));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        
        $data1 = curl_exec($ch);
        curl_close($ch);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-05-26
          • 2011-05-31
          • 1970-01-01
          • 2011-12-06
          • 2011-06-24
          • 2014-04-11
          相关资源
          最近更新 更多