У меня есть установка WordPress, которая использует. NET API, размещенные на другом сервере. В последнее время я столкнулся с этой проблемой, когда моя установка WordPress на Apache / Linux постоянно получала ошибку CURL 56 на нескольких конечных точках. После большой неудачной отладки я перешел в среду Windows / IIS, где все работало нормально.
Теперь, внезапно, я начал получать ту же ошибку и в Windows / IIS. Потрясающая часть заключается в том, что внешние API, которые я вызываю, размещены на одном сервере. Но среди них некоторые работают нормально, а другие выдают ошибку CURL 56.
Так, например, если я позвоню:
https://example.com/api/v5/Members/SignIn
Это прекрасно работает. Но когда я звоню:
https://example.com/api/v5/Members/VerifyDuplicateAccount
Это внезапно заканчивается кодом ошибки CURL 56. Сообщение об ошибке, которое я получаю от curl_error
, выглядит следующим образом:
OpenSSL SSL_read: Connection was reset, errno 10054
Я потратил впустую дней выяснить проблему, но не удалось. Я попытался обновить php_curl до 7.6.8, обновил PHP до 7.4.4, но пока ничего не помогло.
Вот тестовый сценарий, который я написал для отладки:
<?php
ob_start();
$out = fopen('php://output', 'w');
$_headers = array(
'Content-Type: application/json',
'Authorization: Bearer 5579PP5HSfZXjWZ9kpqEn9ST7BaWhTrcEUghL7Z_sRpGKXTmh40WxdfJ-9F7pe5LwHY9w0DH6v8r7HQrNke3JjonWwFRwTV-_8JEUuwudrKf6Ii1QSTGWtkaZ_GRZVWbN8eUh5BzPnRnzF8JQ_Goq_dx0cXQYqewQHG7iAU1aSifatwbAZLY-h_GGBTnJ72uZ6ZNix8E-7Th4Pftrpqx5bytay0fY1ES5ppuqDn4h-9TakZEedwnpzup30ApphTGGQxYAGrkRArEj0nXXV2yH8lHUL8SrZJKc9SGaE8y6qtxQc_F50imU-f8fb5P2WSNaPeYEaYJ2o6dj1r7A9VuiabCxMsdAzIFvlyPSrcdpGO1uBRoTVwVBMmH7prpFRzKWYrX69BF-IET4rN8POT1Zg',
'Expect: '
); //print_r($_headers);
$params = '{"OwnerDescription":"myOwner","UserAgent":"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/80.0.3987.149 Safari\/537.36","VendorKey":"abc123","address":{"HomeAddress":{"CountryCode":"US","StateProvinceAbbrevation":"GA","Line1":"Test ADDRESS","City":"ATL","PostalCode":"30003"},"MailingAddress":{"CountryCode":"US","StateProvinceAbbrevation":"GA","Line1":"Test ADDRESS","City":"ATL","PostalCode":"30003"},"BillingAddress":{"CountryCode":"US"}},"contactInfo":{"PrimaryContactNumber":"1234334444","Email":"xyzm@gmail.com"},"membership":{"Members":[{"FirstName":"Osama","MiddleName":"","LastName":"Trankler","ParticipantType":"Primary","Gender":"NotAvailable","DateOfBirth":"11\/12\/1998"}],"EffectiveDate":"04\/08\/2020","Term":null,"TermLength":null,"PlanName":"ABC"}}';
$curl = curl_init();
$url = 'https://example.com/api/v5/Members/VerifyDuplicateAccount';
curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_HTTPHEADER, $_headers);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt($curl, CURLOPT_TIMEOUT, 600);
curl_setopt($curl, CURLOPT_FAILONERROR, TRUE);
curl_setopt($curl, CURLOPT_VERBOSE, TRUE);
if ($response = curl_exec($curl)) {
} else {
$response = curl_error($curl);
}
echo 'curl_error=>'.curl_errno($curl);
@curl_close($curl);
fclose($out);
$debug = ob_get_clean();
echo 'debug=> '.$debug;
print_r($response);
?>
И вот ответ, который я получаю:
* Trying 199.1.1.1:443...
* TCP_NODELAY set
* Connected to example.com (199.1.1.1) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: C:\curl_cert\cacert.pem
CApath: none
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-SHA384
* ALPN, server did not agree to a protocol
* Server certificate:
* subject: C=US; ST=Texas; L=Lewisville; O=ABC Holdings LLC
T; CN=*.example.com
* start date: Nov 13 00:00:00 2019 GMT
* expire date: Nov 17 12:00:00 2021 GMT
* issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=DigiCert SHA2 Hig
rance Server CA
* SSL certificate verify ok.
> PUT /api/v5/Members/VerifyDuplicateAccount HTTP/1.1
Host: example.com
Accept: */*
Content-Type: application/json
Authorization: Bearer 5579PP5HSfZX
Content-Length: 1023
* upload completely sent off: 1023 out of 1023 bytes
* OpenSSL SSL_read: Connection was reset, errno 10054
* Closing connection 0
debug=> curl_error=>56 OpenSSL SSL_read: Connection was reset, errno 10054