Php OpenSSL SSL\u读取:SSL\u错误\u系统调用,错误号104

Php OpenSSL SSL\u读取:SSL\u错误\u系统调用,错误号104,php,curl,Php,Curl,我通过curl在基于ssl-means(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'); // (f

我通过curl在基于ssl-means(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);
如何找到失败的原因?失败的原因可能是什么?请提供您的建议。

我也有同样的问题

OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 104
我猜这个错误被认为是openssl之类的。 但事实并非如此

在我的例子中,一个POST参数的值是错误的。(类似于OTP代码)
我终于解决了这个问题。

我收到了这个错误,只需等待半个小时,然后再试一次就可以解决它

可能有很多原因会让你这么做

对我来说,我之所以这样做是因为我使用了curl,而我访问的网站不喜欢使用curl。我用以下方法解决了这个问题:

curl -A "Mozilla Chrome Safari" someserver.com/somepage.html
这告诉curl对服务器说,‘嘿,我是一个浏览器’。您可以使用您喜爱的浏览器获取更好、更新的字符串,进入浏览器开发人员控制台(通常位于“网络”下),您可以看到单个请求项,在那里您可以获取当前浏览器作为“用户代理”发送的字符串


网站之所以会这样做,是因为你的典型客户不使用curl。最好的情况是curl是一个使用服务器资源的机器人,最坏的情况是一个邪恶的黑客。

我还意识到它丢失了post数据信息。这样做之后,一切都按预期进行了

我在将数据发布到域时也遇到了错误

OpenSSL SSL\u读取:SSL\u错误\u系统调用,错误号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;

它对我来说很有魅力。希望这也能对您有所帮助。

您是否在docker中运行此程序?您找到解决方案了吗?不确定这是否与您的问题有关,但似乎您缺少了一个CURLOPT_RETURNTRANSFER。是的,在我能够
curl
之前,我一直没有任何问题,但今天出现了此错误,而代码根本没有更改。感觉像是一个网络问题,可能会不时发生,但我不确定。