Вызов API cURL возвращает 404 (если проверка SSL отключена), но вызов JS API работает правильно - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь настроить форму, которая после отправки отправит данные через вызов API для сохранения на стороннем портале.Портал настроен как поддомен для основного сайта, но размещен на другом сервере.

При тестировании вызовов API в Postman они будут работать только в том случае, если я подключен через прокси-сервер и отключил SSLпроверка сертификата в настройках.На сайте я получаю сообщение об ошибке cURL: «Проблема с сертификатом SSL: невозможно получить сертификат локального эмитента».Администратор сервера, управляющий основным сайтом, попытался разрешить эту покупку, следуя указаниям здесь https://curl.haxx.se/docs/sslcerts.html,, но пока не смог найти решение.

Пока они выясняли проблему с сертификатом, я хотел, чтобы вызовы API как минимум работали, и, поскольку все запросы должны все же проверяться персоналом клиента вручную, я подумал, что можно быстро обойти запретпроверка SSL в вызове cURL (очевидно, не идеальная), как временное решение для клиента.

Я использую вызов cURL:

$url = "https://subdomain.primarydomain.com:444/api/v2/login?username=username&password=12345";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");


$result = curl_exec($ch);
if ($result === false) {
    echo 'Curl error: ' . curl_error($ch);
} else {
    echo 'Operation completed without any errors';
}
curl_close($ch);    

Это возвращает404 не найден ответ при выполнении команды cURL.Этот результат происходит, если код запускается на сервере основного домена или если я запускаю его локально (WAMP), даже когда он подключен через VPN.

Однако следующий код JS работает нормально и возвращает ожидаемые результаты:

async function getTkn()
{
    var tkn = "";

    try {
        var postResult = await $.post("https://subdomain.primarydomain.com:444/api/v2/login", {username: "username", password: "12345"}, function(data){
            console.log("success in post");
            console.log(data);
            tkn = data.token;
            })
            .done(function(data) {
                console.log("post is done");
                console.log(data);

                if(data.token != "")
                {
                    console.log("log in successful");
                    console.log("token-success: " + data.token);
                    // Save Registration Data
                //  await saveClientRegistration(tkn, fieldValues);
                }
                else
                {
                    console.log("log in fail");
                    console.log("token-fail: " + data);
                }
            })
            .fail(function(data) {
                console.log("authentication failed");
            })
            .always(function(data) {
                console.log("always finished");
            }).then();

    } catch(e) {
        console.log(e);
    }   

    return tkn;
}

Поскольку нам нужно отправить имя пользователя / пароль в виде обычного текста, я не хочу хранить их в легко доступном файле JS, поэтому мне бы хотелось, чтобы PHP cURL работал.

Буду очень признателен за любые предложения по решению проблем cURL, так как последние 6 часов я пробовал разные вещи из Google.

ОБНОВЛЕНИЕ: Я пытался использоватьпараметры прокси в cURL как следующие безуспешно.Я получаю сообщение об ошибке: «Ошибка Recv: сброс соединения по пиру»

$proxy = 'maindomain_IP:444';
$proxyauth = 'proxy_user:proxy_pass';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth);
//curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); 
curl_setopt($ch, CURLOPT_PORT, 444);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT , 10);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
//curl_setopt ($ch, CURLOPT_VERBOSE, TRUE);
if (curl_exec($ch) === false) {
    echo 'Curl error: ' . curl_error($ch);
} else {
    echo 'Operation completed without any errors';
}
$content = curl_exec($ch);
curl_close($ch);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...