Нам предоставили 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]);
}
Но это грязно ...