В чем разница между php-curl и php-скриптом вызова браузера для отправки http-запроса? - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь отправить уведомление с сервера на все устройства Android с той же темой, называющей API-интерфейс для облачных сообщений Google firebase (HTTP v1), однако в ответе http говорится, что 411 код ошибки, который соответствует запросам POST, требует заголовок Content-length,но я добавляю длину содержимого в заголовок http-запроса. Затем я помещаю сценарий в каталог www хоста и вызываю этот сценарий с помощью браузера, запрос выполняется успешно, так как же два способа отправки запросов http, получающих разные результаты?что делает nginx в этом процессе, чтобы сделать запрос успешным?PS: я f12 открываю консоль и вставляю заголовок в заголовок php curl, все равно не работает, чего не хватает, так сбивает с толку ..

$topic = 'xxxxx';
    $projectId = 'xxxx';
    $title = 'hahaha';
    $content = 'lol';

    $payload = array(
        'message' => array(
            'topic' => $topic,
            'notification' => array(
                'title' => $title,
                'body' => $content,
            )
        )
    );

    $json = json_encode($payload);
    $headers = array(
        'Authorization:Bearer '.$this->getFcmApiAccessToken(),
        'Content-Type: application/json; UTF-8',
        'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'Accept-Encoding: gzip, deflate',
        'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8',
        'Cache-Control: max-age=0',
        'Cookie: hrg_session=30d4sk8ue8jbe795m3aavrgv97ds4n9g',
        'Host: test.hrgame.com.hk',
        'Proxy-Connection: keep-alive',
        'Upgrade-Insecure-Requests: 1',
        'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36',
    );

    print_r($headers);

    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,"https://fcm.googleapis.com/v1/projects/{$projectId}/messages:send");
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($ch,CURLOPT_POST, true );
    curl_setopt($ch,CURLOPT_HEADER, 1);
    curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch,CURLOPT_POSTFIELDS, $json);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);

    $result = curl_exec($ch);

    curl_close($ch);
    var_dump($result);exit;

Ошибка 411 (требуется длина) !! 1

Для запросов POST требуется заголовок Content-length.Это все, что мы знаем.

google api response

1 Ответ

0 голосов
/ 25 мая 2018

Я изменил php на python для отправки почтового запроса, и он успешно отправил запрос.до сих пор не знаю в чем проблема с php curl lib

...