почтовый запрос работает в почтальоне, но не в php - PullRequest
0 голосов
/ 13 апреля 2020

Это параметры в почтальоне:

POST URL:

https://rest-api.wm.com/user/authenticate

Заголовки:

apikey: 6277FF29BB19666078AC
content-type: application/json

body: (имя пользователя и пароль неверны в следующий пример)

{"username": "xxx@xxx.com", "password": "xxx", "locale": "en_US"}

и в результате я получил JSON страница, которая подтверждает, что я вошел в систему на сайте.

Но когда я конвертирую этот код в PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://rest-api.wm.com/user/authenticate",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS =>"{\"username\":\"xxx@xxx.com\",\"password\":\"xxx\",\"locale\":\"en_US\"}",
  CURLOPT_HTTPHEADER => array(
    "apikey:  6277FF29BB19666078AC",
    "content-type:  application/json",
    "Content-Type: text/plain"
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

И это не работает, когда я запускаю скрипт I получил эту ошибку:

{"status":"failed","errorMsg":"Please enter valid input","statusCode":400}

Очень странно, как эта cna работает в почтальоне, а не в PHP, любая помощь?

1 Ответ

0 голосов
/ 14 апреля 2020

Попробуйте добавить «Content-Length» в CURLOPT_HTTPHEADER:

CURLOPT_HTTPHEADER => array(
      "apikey:  6277FF29BB19666078AC",
      "Content-Type: application/json",
      "Content-Length: " . strlen($json))
 ),

Вам нужна длина строки json.

...