PHP HTTP POST получает «Этот API не поддерживает синтаксический анализ ввода в кодированной форме». - PullRequest
0 голосов
/ 10 мая 2018

Почему этот фрагмент кода PHP-7 не работает должным образом?

    $json = json_encode($data);
    curl_setopt_array($this->ch, array(
        CURLOPT_URL                 => '...',
        CURLOPT_RETURNTRANSFER      => true,
        CURLOPT_SSL_VERIFYPEER      => false,
        CURLOPT_POST                => 1,
        CURLOPT_POSTFIELDS          => $json,
        CURLOPT_HTTPHEADER          => array(
                                            'Content-Type: application/json; charset=UTF8',
                                            'Content-Length: ' . strlen($json),
                                        ),
    ));

API Google жалуется: "Этот API не поддерживает синтаксический анализ ввода в кодированной форме."

Но какой правильный PHP-foo указывает кодировку, которую хочет Google?

Ответы [ 2 ]

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

Ну, я нашел это !!

Подпрограмма, которая фактически вызывает вызов CURL (не показан) , выдала свой собственный curl_setopt из CURLOPT_HTTPHEADER, очевидно заменяя настройки параметров, показанные здесь.

Код, который работает, выглядит следующим образом: $headers, объединенным с несколькими другими заголовками с помощью процедуры вызова CURL, также не показанной здесь, через CURLOPT_HTTPHEADER) .

    $json = json_encode($data);
    $headers = array(
        'Content-Type: application/json',
        'Content-Length: ' . strlen($json),
        'Accept: application/json'
        );
    curl_setopt_array($this->ch, array(
        CURLOPT_URL                 => '...',
        CURLOPT_RETURNTRANSFER      => true,
        CURLOPT_SSL_VERIFYPEER      => false,
        CURLOPT_POST                => true,
        CURLOPT_POSTFIELDS          => $json,
    ));

Итак, я пытался попробовать «правильное PHP mojo», но не смог понять, что некоторые параметры не были установлены - то есть настройки не «зависли» - из-за еще одна ошибка в моей программе, которая никогда не отображалась в этом билете.

Теперь мы знаем: если вы используете эти параметры CURL, и включают эти заголовки (Accept: на самом деле зависит от вас ...) , и убедитесь, что CURL_POSTFIELDS это строка, а не массив, она будет работать. Принимая во внимание, что если вы сделаете , а не , сделав все эти вещи, результатом будут загадочные сообщения.

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

Возможно, у вас есть строка в кодировке, отличной от UTF8?

У этого парня, похоже, та же проблема https://groups.google.com/forum/#!topic/google-content-api-for-shopping/5I8MHpfbH4A

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