Я пытаюсь создать систему очередей на основе информации, собранной с веб-сайта supermariomakerbookmark.nintendo.net. Сначала я делаю запрос GET в URL-адресе https://supermariomakerbookmark.nintendo.net/courses/7E00-0000-0220-574B, чтобы найти CSRF-токен, присутствующий в поле:
<meta name="csrf-token" content="xxxxxx">
После этого мне нужно сделать запрос POST на https://supermariomakerbookmark.nintendo.net/courses/7E00-0000-0220-574B/play_at_later, передав CSRF-токен и файл cookie в заголовке. Файл cookie предоставляется пользователем и извлекается из базы данных.
Вот мой код:
$cookie = DB::table('CONFIG')->select('cookies')->first()->cookies;
// get csrf token
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://supermariomakerbookmark.nintendo.net/courses/$id");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$html = curl_exec($ch);
$dom = new \DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($html);
$metas = $dom->getElementsByTagName('meta');
for ($i = 0; $i < $metas->length; $i++){
$meta = $metas->item($i);
if($meta->getAttribute('name') == 'csrf-token')
$csrfToken = $meta->getAttribute('content');
}
$headers = array();
$headers[] = "X-CSRF-Token: $csrfToken";
$headers[] = "Cookie: $cookie";
curl_setopt($ch, CURLOPT_URL, "https://supermariomakerbookmark.nintendo.net/courses/$id/play_at_later");
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$ret = curl_exec($ch);
Но это не работает. Запрос curl POST возвращает пользовательскую страницу с ошибкой 500 вместо 200 OK. Я выполняю этот код внутри контроллера в Laravel.
Если я попытаюсь сделать запрос POST с помощью Postman, он сработает. Муравьиная идея о том, как заставить это работать?
$cookie
должен иметь тот же ключ «X-CSRF-Token»? - person WillardSolutions   schedule 23.08.2016