Использование cURL для получения ответа JSON и отслеживания местоположения - PullRequest
0 голосов
/ 24 октября 2019

Нам предоставили token от сторонних поставщиков API, которые нам просто сказали "POST по заданному URL". Использование HTML-формы работает нормально, но в идеале мы хотели бы использовать cURL.

Это код, который у меня есть на данный момент:

$url = 'http://example.com';
$data = ['token' => '1234567890'];

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);

Этот код перенаправляет меня на нужную страницу, но token, похоже, не используется, поэтому я автоматически не захожу на страницу получения.

Если я установлю CURLOPT_FOLLOWLOCATION на false, мой ответ будет таким:

Перемещение объекта

Этот документ можно найти здесь {"result": true, "dossier_token": "ABCDEF"}

Как я могу получить обратно оба dossier_token, которые мне нужны для автоматического входа в систему в ответ JSON, но также и для перенаправления пользователя? В идеале URL, на который они перенаправлены, должен быть http://example.com/ABCDEF

РЕДАКТИРОВАТЬ:

Интересно, если я обеспечу, чтобы cURL вернул заголовок в выводе, а затем вручную проверилзначение для Location:, я получаю правильную ссылку перенаправления. Так что это работает:

$url = 'http://example.com';
$data = ['token' => '1234567890'];

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));

$response = curl_exec($ch);
curl_close($ch);

if (preg_match('~Location: (.*)~i', $response, $matches)) {
    header('Location: ' . $matches[1]);
}

Но это грязно ...

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