POST-запросы для конкретного URL занимают 3 минуты - PullRequest
0 голосов
/ 05 декабря 2018

Все мои запросы POST-типа для определенного URL-адреса на сервере (производственные) занимают около 3 минут, чтобы вернуть ответ, то есть через несколько секунд после отправки формы я смотрю на сайт API и вижумои данные опубликованы, но на моем сайте запрос находится на рассмотрении, и ровно через 3 минуты он завершает возврат необходимых данных.

Я думаю, что-то задерживает ответ в течение 3 минут, потому что я тестировал тот же код в локальномсреда, и она работала быстро (это заняло около 10 секунд), что может быть причиной этой "медлительности"?

enter image description here

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

public function __construct()
{

    $this->url = 'https://api.binance.com/api/';
    $this->curl = curl_init();
    $this->recvWindow = 60000;

    $curl_options = [
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_SSL_VERIFYHOST => false,
        CURLOPT_USERAGENT => 'Binance PHP API Agent',
        CURLOPT_RETURNTRANSFER => true,

    ];

    curl_setopt_array($this->curl, $curl_options);
}

private function privateRequest($url, $params = [], $method = 'GET')
{
    $params['timestamp'] = number_format((microtime(true) * 1000), 0, '.', '');
    $params['recvWindow'] = $this->recvWindow;

    $query = http_build_query($params, '', '&');

    $sign = hash_hmac('sha256', $query, $this->secret);

    $headers = array(
        'X-MBX-APIKEY: ' . $this->key,
    );

    curl_setopt($this->curl, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($this->curl, CURLOPT_URL, $this->url . $url . "?{$query}&signature={$sign}");

    curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($this->curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($this->curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($this->curl, CURLOPT_ENCODING, '');

    if ($method == "POST") {
        curl_setopt($this->curl, CURLOPT_POST, 1);
        curl_setopt($this->curl, CURLOPT_POSTFIELDS, array());
    }

    if($method == 'GET'){
        curl_setopt($this->curl, CURLOPT_POST, false);
    }

    if ($method == 'DELETE') {
        curl_setopt($this->curl, CURLOPT_CUSTOMREQUEST, $method);
    }


    //Get result
    $result = curl_exec($this->curl);

    if ($result === false) {
        throw new \Exception('CURL error: ' . curl_error($this->curl));
    }

    // Decode results
    $result = json_decode($result, true);
    if (!is_array($result) || json_last_error()) {
        throw new \Exception('JSON decode Error');
    }

    return $result;
}

Завиток не генерирует никаких ошибок, поскольку API возвращает состояние 200 с необходимыми данными,проблема заключается в том, что для возврата ответа требуется 3 минуты.

Примечание.Ответ не более 5 секунд.

1 Ответ

0 голосов
/ 05 декабря 2018

Не уверен, для чего нужны временная метка и recvWindow в параметрах, но если вы используете их для проверки определенных временных окон, я бы удостоверился, что сервер настроен с правильным часовым поясом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...