php 在Amazon Marketplace API请求上获取响应状态代码为0的内部错误

8iwquhpp  于 2023-02-18  发布在  PHP
关注(0)|答案(3)|浏览(173)

我已经下载了Amazon的Marketplace SDK,并且正在试用samples目录中的一个示例。但是,每当我试用它时,我都会遇到一个异常,详细信息如下:

Caught Exception: Internal Error
Response Status Code: 0
Error Code: 
Error Type: 
Request ID: 
XML: RequestId: , ResponseContext: , Timestamp: 
ResponseHeaderMetadata:

我也用SSL启用了CURL。我做错了什么?

oaxa6hgo

oaxa6hgo1#

此答案供将来参考。有关深入的故障排除,请参阅问题的注解。
响应为空表示与Amazon服务器的连接失败。在这种情况下,HTTP工作正常,但HTTPS不工作。由于在cURL设置中关闭CURLOPT_SSL_VERIFYPEER解决了该问题,因此Amazon服务器似乎没有使用有效的SSL证书。
打开CURLOPT_SSL_VERIFYPEER会检查请求的主机是否具有有效证书,如果没有,则让cURL返回false。关闭CURLOPT_SSL_VERIFYPEER时,将接受无效证书(例如,自签名证书)并返回常规响应。

zaq34kh6

zaq34kh62#

在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,

在我的情况下做到了这一点。因为我不是一个安全Maven,但是,从这个Angular 来看没有建议。至少它的工作,你可能不会失去1整天,因为我做了。

l2osamch

l2osamch3#

我在Amazon遇到过一个非常类似的连接问题,它是与Amazon PHP API捆绑在一起的示例文件,其中包含以下配置数组:

$config = array (
  'ServiceURL' => $serviceUrl,
  'ProxyHost' => null,
  'ProxyPort' => -1,
  'MaxErrorRetry' => 3,
);

并且如果这被复制并且不被修改

'ProxyPort' => -1,

将导致尝试通过代理端口-1连接,当然会失败(通过检查curl错误跟踪问题)。我希望这会有所帮助。

相关问题