我正在通过curl 构建基于ssl的命令数据(https)api,但它返回OpenSSL SSL_read:SSL_ERROR_SYSCALL,errno 104消息.
这是我的测试代码,根据客户端需要json:
$apiKey = "xxxxxx-xxxxxx-xxxxx-xxxxxx-xxxxxx";
$privatekey = "xxxxxx-xxxxxx-xxxxx-xxxxxx-xxxxxx";
$timestamp = date('Y-m-d H:i:s'); // (for example: 2016-07-19 14:05:55)
$signature = hash_hmac('sha1', $timestamp, $apiKey);
$signature = hash_hmac('sha1', $privatekey, $signature);
$postURL = "https://www.compu-cover.com/intelligent-rewards/orders/?OrderNo=123";
$orderInfo['Order'] = array(
"apiKey" => $apiKey,
"privatekey" => $privatekey,
"Signature" => $signature,
"Timestamp" => $timestamp,
"Firstname" => "Ajay",
"Surname" => "Sharma",
"EmailAddress" => "ajay@yopmail.com",
"DaytimeTel" => "0141798526",
"EveningTel" => "0141798526",
"MobileTel" => "9887654321",
"Address1" => "A-5",
"Address2" => "Jhalana",
"Address3" => "Jaipur",
"Address4" => "Rajasthan",
"County" => "India",
"Postcode" => "302019",
"Cover" => "ADTBL",
"Scheme" => 2,
"Premium" => 5,
"EquipmentQty" => 1,
"EquipmentType1" => "Smartphone",
"EquipmentMake1" => "Moto",
"EquipmentModel1" => "Moto G",
"EquipmentPrice1" => 100
);
$params = json_encode($orderInfo);
$session = curl_init($postURL);
curl_setopt($session, CURLOPT_POST, true);
curl_setopt($session, CURLOPT_POSTFIELDS, $params);
curl_setopt($session, CURLOPT_HEADER, true);
curl_setopt($session, CURLOPT_SSL_VERIFYPEER, true);
$response = curl_exec($session);
if (FALSE === $response) {
var_dump(curl_error($session));
var_dump(curl_errno($session));
}
curl_close($session);
$response = json_decode($response);
var_dump($response);
Run Code Online (Sandbox Code Playgroud)
如何找到失败的原因?失败的原因是什么?请提供您的建议.
小智 14
在标准 C 库中,该变量errno包含最近一次系统调用出现问题的代码。值 104 被定义为ECONNRESET“连接被对等方重置”。
该错误仅仅意味着对方挂断了你的电话,没有完成正常的 HTTPS 协议并返回任何回报......可能出于各种原因,可能是网络问题,或者服务器端程序崩溃,或者另一端只是不喜欢你所做的事。它与 OpenSSL 根本没有关系,要了解导致它的原因,您需要访问服务器日志。
我有同样的问题。
OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 104
Run Code Online (Sandbox Code Playgroud)
我猜这个错误被认为是 openssl 等。但是,事实并非如此。
就我而言,POST 参数之一的值错误。(类似于 OTP 代码)我终于解决了它。