Получение `POST-запросов требует заголовка Content-length. 'при запуске кода Curl - PullRequest
0 голосов
/ 05 ноября 2019

Я хочу получить токен Auth2 с помощью этого запроса скручивания:

define("CALLBACK_URL", "http://localhost/los/index");
define("AUTH_URL", "https://accounts.google.com/o/oauth2/auth");
define("ACCESS_TOKEN_URL", "https://oauth2.googleapis.com/token");
 define("CLIENT_ID", "**.apps.googleusercontent.com");
define("CLIENT_SECRET", "**");
define("SCOPE", 
"https://www.googleapis.com/auth/admin.directory.device.chromeos"); // optional


 function getToken(){
 $curl = curl_init();

 $params = array(
CURLOPT_URL =>  ACCESS_TOKEN_URL."?"
                ."code=".$code
                ."&grant_type=authorization_code"
                ."&client_id=". CLIENT_ID
                ."&client_secret=". CLIENT_SECRET
                ."&redirect_uri=". CALLBACK_URL,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_MAXREDIRS => 10,
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_NOBODY => false, 
CURLOPT_HTTPHEADER => array(
  "cache-control: no-cache",
  "content-type: application/x-www-form-urlencoded",
  "accept: *",
  "accept-encoding: gzip, deflate",
),
 );

  curl_setopt_array($curl, $params);


   $response = curl_exec($curl);
 $err = curl_error($curl);
  echo $response;
  curl_close($curl);

  if ($err) {
   echo "cURL Error #01: " . $err;
       } else {
 $response = json_decode($response, true);    
    if(array_key_exists("access_token", $response)) return $response;
if(array_key_exists("error", $response)) echo $response["error_description"];
echo "cURL Error #02: Something went wrong! Please contact admin.";
  }
 }

Однако мне выдается следующее сообщение об ошибке: POST requests require a Content-length header. That’s all we know.

Я пытался удалить символы новой строки вURL, но это не помогло. (Я следовал этому учебнику) Как я могу это исправить? Нужно ли ставить заголовок длины содержимого вручную?

1 Ответ

0 голосов
/ 05 ноября 2019

Вам необходимо добавить заголовок Content-Length в ваш массив CURLOPT_HTTPHEADER.

Значение обычно представляет собой размер тела (в байтах). Поскольку у вас их нет, я бы посоветовал попробовать 0 в качестве значения.

CURLOPT_HTTPHEADER => array(
  "cache-control: no-cache",
  "content-type: application/x-www-form-urlencoded",
  "accept: *",
  "accept-encoding: gzip, deflate",
  "Content-Length: 0"
)
...