我通过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);
如何找到失败的原因?失败的原因是什么?请提供你的建议。
答案 0 :(得分:0)
我已经收到此错误,只需等待半小时然后重试,就可以解决该错误。
答案 1 :(得分:0)
您可能有很多原因。
对我来说,我得到这个是因为我正在使用curl,而我访问的网站不喜欢使用curl。我用以下方法解决了这个问题:
curl -A "Mozilla Chrome Safari" someserver.com/somepage.html
这告诉curl对服务器说,“嘿,我是浏览器”。您可以使用自己喜欢的浏览器来获取更好的更新字符串,通常在“网络”下转到浏览器开发人员控制台,您可以看到各个请求项,然后可以在其中获取当前浏览器作为“用户代理”发送的字符串。 / p>
网站这样做的原因是您的典型客户不使用curl。最好的情况是,curl可能是机器人消耗了服务器资源,最坏的情况是恶意的黑客入侵。
答案 2 :(得分:0)
我还意识到缺少职位数据信息。这样做之后,一切都按预期进行
答案 3 :(得分:0)
在将数据发布到域时,我也遇到了错误
OpenSSL SSL_read:SSL_ERROR_SYSCALL,错误编号104
正如LazyBrush所述,我有一个解决方案,您可以按照以下步骤在curl中设置用户代理:
$data_string_ary = array(SOME ARRAY INDEXES);
$data_string = json_encode($data_string_ary);
$url = 'someserver.com/somepage.html';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla Chrome Safari');
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Authorization: YOUR AUTHORIZATION CODE'
));
$result = curl_exec($ch);
curl_close($ch);
return $result;
对我来说,它就像是一种魅力。希望这对您也有帮助。
答案 4 :(得分:-1)
我有同样的问题。
OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 104
我猜这个错误被视为openssl等。 但是,事实并非如此。
在我的情况下,POST参数之一是错误的值。 (类似于OTP代码) 我终于解决了。