我已经下载了亚马逊的Marketplace SDK,我正在试用样本目录中的一个样本。但是,每当我尝试时,我都会收到以下详细信息的例外情况:
Caught Exception: Internal Error
Response Status Code: 0
Error Code:
Error Type:
Request ID:
XML: RequestId: , ResponseContext: , Timestamp:
ResponseHeaderMetadata:
我也使用SSL启用了CURL。我做错了什么?
答案 0 :(得分:15)
这个答案供将来参考。有关深入的故障排除,请参阅有关该问题的评论。
空响应表示与Amazon服务器的连接失败。在这种情况下,HTTP工作正常,但HTTPS没有。由于在cURL设置中关闭CURLOPT_SSL_VERIFYPEER
解决了问题,因此似乎亚马逊服务器未使用有效的SSL证书。
启用CURLOPT_SSL_VERIFYPEER
检查请求的主机是否具有有效证书,如果不是,则让cURL返回false
。当CURLOPT_SSL_VERIFYPEER
关闭时,接受无效证书(例如,自签名)并返回常规回复。
答案 1 :(得分:2)
供将来参考。在新版本的SDK中,选项在client.php中引用,如下所示
private function getDefaultCurlOptions() {
return array (
CURLOPT_POST => true,
CURLOPT_USERAGENT => $this->config['UserAgent'],
CURLOPT_VERBOSE => true,
CURLOPT_HEADERFUNCTION => array ($this, 'headerCallback'),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => true,
CURLOPT_SSL_VERIFYHOST => 2
);
}
设置
CURLOPT_SSL_VERIFYPEER => false,
在我的案例中做了伎俩。但是,由于我不是安全专家,因此从这一观点来看,没有任何建议。至少它的工作和你可能没有像我一样失去一整天。
答案 2 :(得分:1)
我遇到了与亚马逊非常相似的连接问题。它是与Amazon php api捆绑在一起的示例文件,其中包含以下配置数组:
$config = array (
'ServiceURL' => $serviceUrl,
'ProxyHost' => null,
'ProxyPort' => -1,
'MaxErrorRetry' => 3,
);
如果这是复制而未修改
'ProxyPort' => -1,
将导致尝试通过代理端口-1连接,这当然会失败(通过检查卷曲错误来跟踪问题)。我希望这会有所帮助。