Ответ Curl пуст после публикации данных через сообщение php - PullRequest
1 голос
/ 16 февраля 2020

У меня есть форма, в которой пользователь помещает свой apiKey, после чего после проверки на ошибки, если все в порядке, сценарий обработки отправляет ключ через curl на мой сервер для проверки. тогда мой сервер должен вернуть успех true | ложь и код ошибки, если ложь. но когда я отправляю файл, ответ curl будет пустым.

$post['apiKey'] = $apiKey;    
$ch = curl_init();
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_URL,"https://www.pawnhost.com/phevapi/verify_api.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

$res = curl_exec($ch);
if ($res === FALSE) {
    echo "Curl Error:" . curl_error($ch);
}

curl_close($ch);

print_r($res);

Скрипт, который мы отправляем:

<?php 

define("ERROR_HEADER_URL", "Location: " . $_SERVER['HTTP_REFERER'] . "?error=");

require("includes/initialize.php");

if ($_SERVER['REQUEST_METHOD'] != 'POST') header(ERROR_HEADER_URL . "invalidRequest");

if (!isset($_POST['apiKey'])) header(ERROR_HEADER_URL . "verficationFailed");

$apiKey = escape($_POST['apiKey']);

if (isInputEmpty($apiKey)) {
    header(ERROR_HEADER_URL . "emptyFields");

} elseif (!$apiKey == 25) {
    header(ERROR_HEADER_URL . urlencode("invalidKey"));

} else {

    $response = [];

    if (getApiKeyUserDetails($apiKey, $connection)) {

        if (getApiKeyUserDetails($apiKey, $connection)['apiKeyUsed'] > 0) {
            $response['success'] = false;
            $response['error'] = 'apiKeyUsed';
        } else {
            makeApiKeyUsed($apiKey, $connection);
            $response['success'] = true;
        }

    } else {
        $response['success'] = false;
        $response['error'] = 'invalidApiKey';
    }

    return json_encode($response);

}

1 Ответ

0 голосов
/ 19 февраля 2020

Вы должны отправить в качестве вывода $response не return это:

вместо

return json_encode($response);

использовать

echo json_encode($response);

Также обратите внимание, что если eihter isInputEmpty($apiKey) или !$apiKey == 25 оценивают true , то выполнение не закрепляет последний условный блок, и вы не получите никакого вывода в теле ответа.

Лог сценария c заключается в том, что для каких-либо ошибок установлен заголовок speci c для уведомления об ошибке.

Скрипт curl, отправляющий запрос, должен также проверять заголовки.

Кому Для этого вы можете использовать следующий код до curl_exec

$response_headers = [];

curl_setopt( $ch, CURLOPT_HEADERFUNCTION,
    function( $curl, $header ) use ( &$response_headers )
    {
        $len = strlen( $header );
        $header = explode(':', $header, 2);
        if( count( $header ) < 2 ) { return $len; } // ignore invalid headers
        $response_headers[ strtolower( trim( $header[0] ) ) ] = trim( $header[1] );
        return $len;
    }
);
...