我发现这个函数做得很棒(IMHO):http://nadeausoftware.com/articles/2007/06/php_tip_how_get_web_page_using_curl

/**
 * Get a web file (HTML, XHTML, XML, image, etc.) from a URL.  Return an
 * array containing the HTTP server response header fields and content.
 */
function get_web_page( $url )
{
    $options = array(
        CURLOPT_RETURNTRANSFER => true,     // return web page
        CURLOPT_HEADER         => false,    // don't return headers
        CURLOPT_FOLLOWLOCATION => true,     // follow redirects
        CURLOPT_ENCODING       => "",       // handle all encodings
        CURLOPT_USERAGENT      => "spider", // who am i
        CURLOPT_AUTOREFERER    => true,     // set referer on redirect
        CURLOPT_CONNECTTIMEOUT => 120,      // timeout on connect
        CURLOPT_TIMEOUT        => 120,      // timeout on response
        CURLOPT_MAXREDIRS      => 10,       // stop after 10 redirects
    );

    $ch      = curl_init( $url );
    curl_setopt_array( $ch, $options );
    $content = curl_exec( $ch );
    $err     = curl_errno( $ch );
    $errmsg  = curl_error( $ch );
    $header  = curl_getinfo( $ch );
    curl_close( $ch );

    $header['errno']   = $err;
    $header['errmsg']  = $errmsg;
    $header['content'] = $content;
    return $header;
}

我唯一的问题是,它不适用于https://.我需要做些什么才能让它为https服务?谢谢

推荐答案

快速修复,在您的选项中添加以下内容:

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false)

现在,您不知道实际连接的主机是什么,因为cURL不会以任何方式验证证书.希望你喜欢man-in-the-middle attacks

或者只需将其添加到当前函数:

/**
 * Get a web file (HTML, XHTML, XML, image, etc.) from a URL.  Return an
 * array containing the HTTP server response header fields and content.
 */
function get_web_page( $url )
{
    $options = array(
        CURLOPT_RETURNTRANSFER => true,     // return web page
        CURLOPT_HEADER         => false,    // don't return headers
        CURLOPT_FOLLOWLOCATION => true,     // follow redirects
        CURLOPT_ENCODING       => "",       // handle all encodings
        CURLOPT_USERAGENT      => "spider", // who am i
        CURLOPT_AUTOREFERER    => true,     // set referer on redirect
        CURLOPT_CONNECTTIMEOUT => 120,      // timeout on connect
        CURLOPT_TIMEOUT        => 120,      // timeout on response
        CURLOPT_MAXREDIRS      => 10,       // stop after 10 redirects
        CURLOPT_SSL_VERIFYPEER => false     // Disabled SSL Cert checks
    );

    $ch      = curl_init( $url );
    curl_setopt_array( $ch, $options );
    $content = curl_exec( $ch );
    $err     = curl_errno( $ch );
    $errmsg  = curl_error( $ch );
    $header  = curl_getinfo( $ch );
    curl_close( $ch );

    $header['errno']   = $err;
    $header['errmsg']  = $errmsg;
    $header['content'] = $content;
    return $header;
}

Php相关问答推荐

在WooCommerce中执行一次银行电汇确认付款代码

在WooCommerce管理订单页面中显示区域名称

有没有办法为整个PHP应用程序启用严格类型

从订单项目中获取ACF WooCommerce产品价值

从AJAX响应中获取一个未定义的html

如何在laravel中使用script type= text/html/script

在Laravel中从动态嵌套数组中获取值

如何将WooCommerce产品从一个产品复制到另一个产品S

如何配置我的.env文件以在laravel的一个项目中连接两个不同的数据库?

从WooCommerce订单项目获取Dokan卖家详细信息

用自定义代码替换 WooCommerce 单一产品简短描述

Docker-用于部署的 PHP 应用程序映像无法在本地运行

如何处理 Null 上的 array_shift() ?

使用用户元数据填写 woocommerce checkout 字段

当所有对象都属于同一类型时,我可以省略 PHP in_array() 中的 strict 参数吗?

我需要一个正则表达式模式来获取在不包含特定字符串后面的模式中的文本

批量作业(job)提交错误无法处理所有文档,uris 似乎正确?

仅允许减少 WooCommerce 中已完成订单的库存数量

是否有适用于 Windows 的真正 64 位版本的 PHP 5.6?

为什么 ECDSA 384 签名验证在 GO 中失败,但在 PHP 中却没有?