加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 如何解决错误:需要OpenSSL支持https:// requests?

发布时间:2020-12-13 16:54:12 所属栏目:PHP教程 来源:网络整理
导读:我正在使用 VWS – PHP Samples,它可以从本地PC上按预期工作,但当我将其上传到服务器时,它给出了以下错误: POST 999e93717344885fd7c458301a5b00c9 application/json Thu,11 Sep 2014 08:14:20 GMT /targetsError: Need OpenSSL support for https:// reque
我正在使用 VWS – PHP Samples,它可以从本地PC上按预期工作,但当我将其上传到服务器时,它给出了以下错误:

POST 999e93717344885fd7c458301a5b00c9 application/json Thu,11 Sep
2014 08:14:20 GMT /targetsError: Need OpenSSL support for https://
requests

域名是使用GoDaddy的证书启用https,出了什么问题?

define("SERVER_ACCESS_KEY","12345678");
            define("SERVER_SECRET_KEY","654321");
            define("TARGET_NAME",$campaignname);
            define("IMAGE_LOCATION",$directory . '/dispatcher.' . $path_parts['extension']);

            $this->load->library('Vuforia/PostNewTarget');

示例代码是SignatureBuilder.php:

<?php

/**
 * Copyright (c) 2011-2013 Qualcomm Austria Research Center GmbH. All rights Reserved. Nothing in these materials is an offer to sell any of the components or devices referenced herein. Qualcomm is a trademark of QUALCOMM Incorporated,registered in the United States and other countries.Vuforia is a trademark of QUALCOMM Incorporated. Trademarks of QUALCOMM Incorporated are used with permission.
 * Vuforia SDK is a product of Qualcomm Austria Research Center GmbH. Vuforia Cloud Recognition Service is provided by Qualcomm Technologies,Inc..
 *
 * This Vuforia (TM) sample code provided in source code form (the "Sample Code") is made available to view for reference purposes only. 
 * If you would like to use the Sample Code in your web application,you must first download the Vuforia Software Development Kit and agree to the terms and conditions of the License Agreement for the Vuforia Software Development Kit,which may be found at https://developer.vuforia.com/legal/license. 
 * Any use of the Sample Code is subject in all respects to all of the terms and conditions of the License Agreement for the Vuforia Software Development Kit and the Vuforia Cloud Recognition Service Agreement. 
 * If you do not agree to all the terms and conditions of the License Agreement for the Vuforia Software Development Kit and the Vuforia Cloud Recognition Service Agreement,then you must not retain or in any manner use any of the Sample Code.
 * 
 */

class SignatureBuilder{

    private $contentType = '';
    private $hexDigest = 'd41d8cd95fa11b204e7600998ecf8427e'; // Hex digest of an empty string

    public function tmsSignature( $request,$secret_key ){

        $method = $request->getMethod();
        // The HTTP Header fields are used to authenticate the request
        $requestHeaders = $request->getHeaders();
        // note that header names are converted to lower case
        $dateValue = $requestHeaders['date'];

        $requestPath = $request->getURL()->getPath();

        // Not all requests will define a content-type
        if( isset( $requestHeaders['content-type'] ))
            $this->contentType = $requestHeaders['content-type'];

        if ( $method == 'GET' || $method == 'DELETE' ) {
            // Do nothing because the strings are already set correctly
        } else if ( $method == 'POST' || $method == 'PUT' ) {
            // If this is a POST or PUT the request should have a request body
            $this->hexDigest = md5( $request->getBody(),false );

        } else {
            print("ERROR: Invalid content type passed to Sig Builder");
        }



        $toDigest = $method . "n" . $this->hexDigest . "n" . $this->contentType . "n" . $dateValue . "n" . $requestPath ;

        echo $toDigest;

        $shaHashed = "";

        try {
            // the SHA1 hash needs to be transformed from hexidecimal to Base64
            $shaHashed = $this->hexToBase64( hash_hmac("sha1",$toDigest,$secret_key) );

        } catch ( Exception $e) {
            $e->getMessage();
        }

        return $shaHashed;  
    }


    private function hexToBase64($hex){

        $return = "";

        foreach(str_split($hex,2) as $pair){

            $return .= chr(hexdec($pair));

        }

        return base64_encode($return);
    }


}

示例代码是PostNewTarget.php:

<?php

require_once 'HTTP/Request2.php';
require_once 'SignatureBuilder.php';

// See the Vuforia Web Services Developer API Specification - https://developer.vuforia.com/resources/dev-guide/retrieving-target-cloud-database
// The PostNewTarget sample demonstrates how to update the attributes of a target using a JSON request body. This example updates the target's metadata.

class PostNewTarget{

    //Server Keys
    private $access_key     = SERVER_ACCESS_KEY;
    private $secret_key     = SERVER_SECRET_KEY;

    //private $targetId         = "eda03583982a41dcbe9ca7f30731b9b1";
    private $url            = "https://vws.vuforia.com";
    private $requestPath    = "/targets";
    private $request;       // the HTTP_Request2 object
    private $jsonRequestObject;

    private $targetName     = TARGET_NAME;
    private $imageLocation  = IMAGE_LOCATION;

    function PostNewTarget(){

        $this->jsonRequestObject = json_encode( array( 'width'=>320.0,'name'=>$this->targetName,'image'=>$this->getImageAsBase64(),'application_metadata'=>base64_encode("Vuforia test metadata"),'active_flag'=>1 ) );

        $this->execPostNewTarget();

    }

    function getImageAsBase64(){

        $file = file_get_contents( $this->imageLocation );

        if( $file ){

            $file = base64_encode( $file );
        }

        return $file;

    }

    public function execPostNewTarget(){

        $this->request = new HTTP_Request2();
        $this->request->setMethod( HTTP_Request2::METHOD_POST );
        $this->request->setBody( $this->jsonRequestObject );

        $this->request->setConfig(array(
                'ssl_verify_peer' => false
        ));

        $this->request->setURL( $this->url . $this->requestPath );

        // Define the Date and Authentication headers
        $this->setHeaders();


        try {

            $response = $this->request->send();

            if (200 == $response->getStatus() || 201 == $response->getStatus() ) {
                echo $response->getBody();
            } else {
                echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
                        $response->getReasonPhrase(). ' ' . $response->getBody();
            }
        } catch (HTTP_Request2_Exception $e) {
            echo 'Error: ' . $e->getMessage();
        }


    }

    private function setHeaders(){
        $sb =   new SignatureBuilder();
        $date = new DateTime("now",new DateTimeZone("GMT"));

        // Define the Date field using the proper GMT format
        $this->request->setHeader('Date',$date->format("D,d M Y H:i:s") . " GMT" );

        $this->request->setHeader("Content-Type","application/json" );
        // Generate the Auth field value by concatenating the public server access key w/ the private query signature for this request
        $this->request->setHeader("Authorization","VWS " . $this->access_key . ":" . $sb->tmsSignature( $this->request,$this->secret_key ));

    }
}

当我尝试安装OpenSSL时

yum install php-openssl openssl
Loaded plugins: fastestmirror,security
Loading mirror speeds from cached hostfile
 * base: centos.mirrors.atwab.net
 * extras: centos.mirrors.atwab.net
 * updates: centos.mirrors.atwab.net
base                                                                                                                                                                                                              | 3.7 kB     00:00     
extras                                                                                                                                                                                                            | 3.3 kB     00:00     
updates                                                                                                                                                                                                           | 3.4 kB     00:00     
updates/primary_db                                                                                                                                                                                                | 5.3 MB     00:00     
Setting up Install Process
No package php-openssl available.
Package openssl-1.0.1e-16.el6_5.15.x86_64 already installed and latest version
Nothing to do

我试过这段代码看看openssl是否可用:

if (!extension_loaded('openssl')) {
    echo "no openssl extension loaded.";
}

结果是:

no openssl extension loaded.

这是在CentOS上 – PHP版本5.2.17

解决方法

Error: Need OpenSSL support for https:// requests

当HTTP_Request2在stream transports list中找不到ssl时会发生此错误.为了使用https stream protocol wrapper,OpenSSL PHP extension必须为installed.

这与Apache的mod_ssl无关,或者您的网站是否通过https提供.这是关于PHP连接到URL“https://vws.vuforia.com”来执行请求.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读