Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 卷在黄蜂身上不起作用_Php_Curl - Fatal编程技术网

Php 卷在黄蜂身上不起作用

Php 卷在黄蜂身上不起作用,php,curl,Php,Curl,我正在使用一家公司编写的php客户端访问他们的web服务。 客户机非常全面,包括从web服务端点生成的XML响应填充的类 当我在适当的web服务器上运行它时,它就工作了。但是,当我在本地与wamp一起使用它时,它抛出了一个错误,即没有收到任何数据 我已经检查了StackOverflow的所有地方,我通常会找到我问题的答案,但这一个已经让我发疯了 以下是httpPost函数(作为它们提供的php客户端的一部分编写): 顺便说一句,我的curl扩展是活动的,我甚至做了一个简单的测试,成功地获取了go

我正在使用一家公司编写的php客户端访问他们的web服务。 客户机非常全面,包括从web服务端点生成的XML响应填充的类

当我在适当的web服务器上运行它时,它就工作了。但是,当我在本地与wamp一起使用它时,它抛出了一个错误,即没有收到任何数据

我已经检查了StackOverflow的所有地方,我通常会找到我问题的答案,但这一个已经让我发疯了

以下是httpPost函数(作为它们提供的php客户端的一部分编写):


顺便说一句,我的curl扩展是活动的,我甚至做了一个简单的测试,成功地获取了google.com。

我的猜测是,它与您的VERIFYPEER选项有关,通常wamp上的curl在默认情况下没有配置为支持它(CA证书包),因此默认情况下它会拒绝所有无法验证的SSL证书

尝试将其替换为(仅当在本地主机上测试时,您希望在使用服务器时启用此选项):

祝你好运

编辑:
这摘自curl的“关于服务器SSL证书的详细信息”:

如果远程服务器使用自签名证书,如果您不使用 如果服务器使用由用户签名的证书,请安装CA证书捆绑包 未包含在您使用的捆绑包中的CA,或者如果远程主机 一个冒名顶替者模仿你最喜欢的网站,你想转移 如果要从该服务器获取文件,请执行以下操作之一:

1) 告诉libcurl不要验证对等方。使用libcurl可以禁用此功能 使用curl_easy_setopt(curl,CURLOPT_SSL_VERIFYPEER,FALSE);具有 在curl命令行工具中,您可以使用-k/--unsecure禁用此选项

2) 获取可以验证远程服务器的CA证书,并在需要时使用适当的选项指出此CA证书以进行验证 连接。对于libcurl黑客:curl\u easy\u setopt(curl, 卡帕斯,卡帕斯);使用curl命令行工具--cacert [文件]


Shay,你说得对,问题是因为WAMP的Windows发行版中没有CA证书捆绑包

在不禁用ssl验证的情况下修复问题(ssl验证不安全,不建议用于生产)

  • 下载CA包。例如,从crul官方网站:保存到
    c:/wamp
  • 在apache中打开php.ini。在我的例子中:
    c:\wamp\bin\apache\apache2.4.9\bin\php.ini
  • 设置curl.cainfo=“c:/wamp/cacert.pem”
  • 重新启动Apache
  • 完成)

    更多信息
    private function _httpPost(array $parameters)
        {
            $query = $this->_getParametersAsString($parameters);
            $url = parse_url ($this->_config['ServiceURL']);
            $scheme = '';
    
            switch ($url['scheme']) {
                case 'https':
                    $scheme = 'https://';
                    $port = $port === null ? 443 : $port;
                    break;
                default:
                    $scheme = '';
                    $port = $port === null ? 80 : $port;
            }
    
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $scheme . $url['host'] . $url['path']);
            curl_setopt($ch, CURLOPT_PORT, $port);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
            curl_setopt($ch, CURLOPT_USERAGENT, $this->_config['UserAgent']);
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $query);
            curl_setopt($ch, CURLOPT_HEADER, true); 
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    
            if ($_config['ProxyHost'] != null && $_config['ProxyPort'] != -1)
            {
                curl_setopt($ch, CURLOPT_PROXY, $_config['ProxyHost'] . ':' . $_config['ProxyPort']);
            }
            $response = "";
            $response = curl_exec($ch);
            $response = str_replace("HTTP/1.1 100 Continue\r\n\r\n", "", $response);
    
    
            curl_close($ch);
    
            list($other, $responseBody) = explode("\r\n\r\n", $response, 2);
            $other = preg_split("/\r\n|\n|\r/", $other);
            list($protocol, $code, $text) = explode(' ', trim(array_shift($other)), 3);
    
            return array ('Status' => (int)$code, 'ResponseBody' => $responseBody);
        }
    
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);