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