Почему сервер не возращает куки?

Ссылка скопирована
1 ответ

Добрый день! Пишу авторизацию через curl.
При авторизации через curl методом POST
в ответах от сервера нет куков. В чем может быть причина?
Вот вывод headers от curl

HTTP/1.1 200 OK Server: nginx Date: Sun, 23 Jul 2023 11:36:05 GMT Content-Type: text/javascript; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive X-Frame-Options: SAMEORIGIN X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none Referrer-Policy: strict-origin-when-cross-origin X-Yatri-Language: en X-Yatri-Country: ca ETag: W/"ac55941fb4c4e86f3c09801981b42932" Cache-Control: max-age=0, private, must-revalidate X-Request-Id: 7c523693-26c9-4346-ba66-01cd6f783cb2 X-Runtime: 0.103947

HTTP/1.1 200 OK Server: nginx Date: Sun, 23 Jul 2023 11:36:05 GMT Content-Type: text/javascript; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive X-Frame-Options: SAMEORIGIN X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none Referrer-Policy: strict-origin-when-cross-origin X-Yatri-Language: en X-Yatri-Country: ca ETag: W/"ac55941fb4c4e86f3c09801981b42932" Cache-Control: max-age=0, private, must-revalidate X-Request-Id: 7c523693-26c9-4346-ba66-01cd6f783cb2 X-Runtime: 0.103947

авторизация проходит успешно но так как нет cookies я не могу перейти на другую страницу , меня перекидывает на авторизацию.
Ответ сервера при авторизации через браузер

Connection: keep-alive sec-ch-ua: "Not.A/Brand";v="8", "Chromium";v="114", "Google Chrome";v="114" X-CSRF-Token: /TM7ZGra8EyDF8QKjQWnhUdzE7Sw/TThuIg2lzL9rJucXCOWNR4M/plq7NGKFtpNmTn7oAQ/Mo0C5x5pKDO+5g== sec-ch-ua-mobile: ?0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Accept: */*;q=0.5, text/javascript, application/javascript, application/ecmascript, application/x-ecmascript X-Requested-With: XMLHttpRequest sec-ch-ua-platform: "Windows" Origin: https://ais.usvisa-info.com Sec-Fetch-Site: same-origin Sec-Fetch-Mode: cors Sec-Fetch-Dest: empty Referer: https://ais.usvisa-info.com/en-ca/niv/users/sign_in Accept-Language: en-RU,en;q=0.9,ru-RU;q=0.8,ru;q=0.7,en-US;q=0.6 Cookie: _ga=GA1.2.916421873.1689788844; _gid=GA1.2.1780722031.1690003049; _yatri_session=NlJqV2ZjamhWUUREN3NockZzZkU5L2QybHhiWG9ZdS9aTUR5amVlaFc0T0dNTXBOQk5ISjVtQWxnREJDN3BhNjNGY3JZSFoxUkNCV2pQc3hLa0NqV28ycmNLZkF5OG1HL0xjOEhsVWZTemRUYUlJRStXZ0NRNDVIUldubnc1SHRZQklKUzhicHhIY1F5R01xQklsVTkzQ2RXTEY1akNsUzYrLzE1OTFQbFBLRDZhaDZ6aWNCejhoUFhEeklQWWNhLS1vVHQ0djZTdzJGaFZvczA3S0NGRnVnPT0%3D--e076e9546364b43bf9a9fd0a2e9de93fcc456c00; _gat=1; _ga_W1JNKHTW0Y=GS1.2.1690110527.10.1.1690112415.0.0.0 Accept-Encoding: gzip, deflate Content-Length: 129

Connection: keep-alive sec-ch-ua: "Not.A/Brand";v="8", "Chromium";v="114", "Google Chrome";v="114" X-CSRF-Token: /TM7ZGra8EyDF8QKjQWnhUdzE7Sw/TThuIg2lzL9rJucXCOWNR4M/plq7NGKFtpNmTn7oAQ/Mo0C5x5pKDO+5g== sec-ch-ua-mobile: ?0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Accept: */*;q=0.5, text/javascript, application/javascript, application/ecmascript, application/x-ecmascript X-Requested-With: XMLHttpRequest sec-ch-ua-platform: "Windows" Origin: https://ais.usvisa-info.com Sec-Fetch-Site: same-origin Sec-Fetch-Mode: cors Sec-Fetch-Dest: empty Referer: https://ais.usvisa-info.com/en-ca/niv/users/sign_in Accept-Language: en-RU,en;q=0.9,ru-RU;q=0.8,ru;q=0.7,en-US;q=0.6 Cookie: _ga=GA1.2.916421873.1689788844; _gid=GA1.2.1780722031.1690003049; _yatri_session=NlJqV2ZjamhWUUREN3NockZzZkU5L2QybHhiWG9ZdS9aTUR5amVlaFc0T0dNTXBOQk5ISjVtQWxnREJDN3BhNjNGY3JZSFoxUkNCV2pQc3hLa0NqV28ycmNLZkF5OG1HL0xjOEhsVWZTemRUYUlJRStXZ0NRNDVIUldubnc1SHRZQklKUzhicHhIY1F5R01xQklsVTkzQ2RXTEY1akNsUzYrLzE1OTFQbFBLRDZhaDZ6aWNCejhoUFhEeklQWWNhLS1vVHQ0djZTdzJGaFZvczA3S0NGRnVnPT0%3D--e076e9546364b43bf9a9fd0a2e9de93fcc456c00; _gat=1; _ga_W1JNKHTW0Y=GS1.2.1690110527.10.1.1690112415.0.0.0 Accept-Encoding: gzip, deflate Content-Length: 129

curl

$options=     [         CURLOPT_RETURNTRANSFER  =>true,         CURLOPT_FOLLOWLOCATION  =>true,         CURLOPT_SSL_VERIFYPEER  =>false,         CURLOPT_COOKIEFILE      =>'cookie.txt',         CURLOPT_COOKIEJAR       =>'cookie.txt',         CURLOPT_HEADER          => true, ];

$options= [ CURLOPT_RETURNTRANSFER =>true, CURLOPT_FOLLOWLOCATION =>true, CURLOPT_SSL_VERIFYPEER =>false, CURLOPT_COOKIEFILE =>'cookie.txt', CURLOPT_COOKIEJAR =>'cookie.txt', CURLOPT_HEADER => true, ];

Куки в файл записываются нормально.

Дополнительно:

https://stackoverflow.com/questions/12885538/php-c...

Тут еще про curl_setopt( $curl_handle, CURLOPT_COOKIESESSION, true ); говорят.

  • Dmitry Bay, щас чекну. Но на других страницах куки идут нормально. Думаю защита от curl авторизации
  • Dmitry Bay, так же, точно защита от curl авторизации
  • В ответе сервера при обращении через браузер есть User-Agent и Referer?
    Мне кажется вы слишком много кушать! (С) "Ширли-Мырли".

    P.S. К сожалению CURL не умеет вписывать доменное имя конкретно в GET-строку HTTP запроса. Защита вполне может оказаться построена на этом. Ну как одна из возможностей.

  • AUser0, так я формирую заголовки для POST отдетельно
    $headers=[                 'Host: '.$url_host,                 'Connection: keep-alive',                'Pragma: no-cache',                 'Cache-Control: no-cache',                 'sec-ch-ua: "Not.A/Brand";v="8", "Chromium";v="114", "Google Chrome";v="114"',                 'X-CSRF-Token:'.$token,                     'sec-ch-ua-mobile: ?0',                 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',                 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8',                 'Accept: */*;q=0.5, text/javascript, application/javascript, application/ecmascript, application/x-ecmascript',                 'X-Requested-With: XMLHttpRequest',                 'sec-ch-ua-platform: "Windows"',                 'Sec-Fetch-Site: same-origin',                 'Sec-Fetch-Mode: cors',                 'Sec-Fetch-Dest: empty',                 'Referer:'.$url_ref,                 'Accept-Language: en-RU,en;q=0.9,ru-RU;q=0.8,ru;q=0.7,en-US;q=0.6',                 'Accept-Encoding: gzip, deflate',          ];

    $headers=[ 'Host: '.$url_host, 'Connection: keep-alive', 'Pragma: no-cache', 'Cache-Control: no-cache', 'sec-ch-ua: "Not.A/Brand";v="8", "Chromium";v="114", "Google Chrome";v="114"', 'X-CSRF-Token:'.$token, 'sec-ch-ua-mobile: ?0', 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36', 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8', 'Accept: */*;q=0.5, text/javascript, application/javascript, application/ecmascript, application/x-ecmascript', 'X-Requested-With: XMLHttpRequest', 'sec-ch-ua-platform: "Windows"', 'Sec-Fetch-Site: same-origin', 'Sec-Fetch-Mode: cors', 'Sec-Fetch-Dest: empty', 'Referer:'.$url_ref, 'Accept-Language: en-RU,en;q=0.9,ru-RU;q=0.8,ru;q=0.7,en-US;q=0.6', 'Accept-Encoding: gzip, deflate', ];

  • AlexSer, хорошо, переформулирую: сервер, именно сервер, конкретно HTTP-сервер - не может отвечать заголовками User-Agent и Referer. Ему,серверу, эти заголовки в его ответе - не нужны. Потому что браузер не ожидает их получить, вот совсем!
  • AUser0, ок чекну
  • AlexSer, а чего тут чекать? Вы дали заголовки ответа CURL-у, осталось дать такие-же заголовки ответа браузеру, вот и всё. А ещё лучше - дайте заголовки запросов, и CURL-а и браузера. Да даже сами можете эти заголовки посмотреть (только реальные заголовки, а не "ну вот у меня в скрипте так прописано, значит так оно и передаётся, зуб даю"), сравнить, и увидеть разницу. Разницу, на которую защита и реагирует.
  • AUser0, спс я решил проблему! Действительно заголовки не совпадали.
    А как сервер понимает, что идет Ajax запрос? Мне просто нужно еще данные вытащить.
  • AlexSer, как-как... А ни как. AJAX отличается от обычного запроса только тем, что его делает не сам браузер в ответ на щелчок мышкой по ссылке, а JavaScript по своему какому-то решению. Ну и как правило AJAX-запрос работает с JSON-форматом данных, потому что просто удобнее.
  • AUser0, Ответ приходит в виде файла. Даже когда не делаю
    echo $html;
    html код отображается в консоли. Не подскажете, что отвечает за отображение файла?
  • AlexSer,
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true ); $html = curl_exec($curl_handle);

    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true ); $html = curl_exec($curl_handle);

  • AUser0, А может ли быть так что я отправкой headers просто мусорю сервер?(строки headers я беру из браузера).
    Я что то начал замечать, что сервер на который я логинюсь, через curl, супер стал зависать.
  • AUser0,
    Пример сборки header
    $hed=[             'Accept:*/*;q=0.5, text/javascript, application/javascript, application/ecmascript, application/x-ecmascript',             'Accept-Encoding:gzip, deflate, br',             'Accept-Language:',             'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',             'Connection:keep-alive',             'Content-Length:129',             'Content-Type:application/x-www-form-urlencoded; charset=UTF-8',             'Host:'.$host_url,             'Origin:'.$host_url,             'Referer:'.$auth_url,             'Sec-Ch-Ua:"Not.A/Brand";v="8", "Chromium";v="114", "Google Chrome";v="114"',             'Sec-Ch-Ua-Mobile:?0',             'Sec-Ch-Ua-Platform:"Windows"',             'Sec-Fetch-Dest:empty',             'Sec-Fetch-Mode:cors',             'Sec-Fetch-Site:same-origin',             'User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)               Chrome/114.0.0.0 Safari/537.36',             'X-Csrf-Token:'.$token,             'X-Requested-With:XMLHttpRequest',         ];         $ch=curl_init();         curl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE);         curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);         curl_setopt($ch,CURLOPT_FOLLOWLOCATION, true);         curl_setopt($ch,CURLOPT_HEADER,true);         curl_setopt($ch, CURLOPT_HTTPHEADER,$hed);         curl_setopt($ch, CURLOPT_URL, $this->url);         curl_setopt($ch,  CURLOPT_POST, true);         curl_setopt($ch, CURLOPT_COOKIEFILE ,'logs/cookie.txt');         curl_setopt($ch, CURLOPT_COOKIEJAR ,'logs/cookie.txt');         curl_setopt($ch,  CURLOPT_REFERER, $url_reffer);         curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);         curl_setopt($ch,CURLINFO_HEADER_OUT,true);         curl_exec($ch);         curl_close($ch);

    $hed=[ 'Accept:*/*;q=0.5, text/javascript, application/javascript, application/ecmascript, application/x-ecmascript', 'Accept-Encoding:gzip, deflate, br', 'Accept-Language:', 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7', 'Connection:keep-alive', 'Content-Length:129', 'Content-Type:application/x-www-form-urlencoded; charset=UTF-8', 'Host:'.$host_url, 'Origin:'.$host_url, 'Referer:'.$auth_url, 'Sec-Ch-Ua:"Not.A/Brand";v="8", "Chromium";v="114", "Google Chrome";v="114"', 'Sec-Ch-Ua-Mobile:?0', 'Sec-Ch-Ua-Platform:"Windows"', 'Sec-Fetch-Dest:empty', 'Sec-Fetch-Mode:cors', 'Sec-Fetch-Site:same-origin', 'User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36', 'X-Csrf-Token:'.$token, 'X-Requested-With:XMLHttpRequest', ]; $ch=curl_init(); curl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE); curl_setopt($ch,CURLOPT_RETURNTRANSFER, true); curl_setopt($ch,CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch,CURLOPT_HEADER,true); curl_setopt($ch, CURLOPT_HTTPHEADER,$hed); curl_setopt($ch, CURLOPT_URL, $this->url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_COOKIEFILE ,'logs/cookie.txt'); curl_setopt($ch, CURLOPT_COOKIEJAR ,'logs/cookie.txt'); curl_setopt($ch, CURLOPT_REFERER, $url_reffer); curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); curl_setopt($ch,CURLINFO_HEADER_OUT,true); curl_exec($ch); curl_close($ch);

  • Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Ирина WP Ответ

    Проблема с отсутствием возврата куки с сервера может быть вызвана несколькими причинами. Ниже приведены несколько возможных причин и их решения:

    1. Неправильно установленные параметры куки:
    Убедитесь, что параметры куки правильно установлены на сервере. Они должны быть установлены до отправки любого контента или заголовков. Например, чтобы установить куки в PHP, используйте функцию setcookie():

       setcookie("cookie_name", "cookie_value", time() + 3600, "/");

    setcookie("cookie_name", "cookie_value", time() + 3600, "/");

    Убедитесь, что вы правильно указали путь к файлу ("/"), чтобы куки были доступны на всех страницах сайта.

    2. Проблемы с безопасностью:
    Некоторые браузеры могут блокировать куки из-за проблем с безопасностью. Убедитесь, что ваш сервер настроен правильно и безопасно. Также убедитесь, что ваш сайт работает через HTTPS, так как некоторые браузеры блокируют куки на незащищенных соединениях.

    3. Проблемы с доменом:
    Убедитесь, что домен, на котором установлены куки, соответствует текущему домену. Куки могут не возвращаться, если они установлены на одном домене, а запрос отправляется на другой.

    4. Проблемы с браузером:
    Иногда проблема может быть связана с конкретным браузером или его настройками. Попробуйте проверить работу кук на другом браузере или очистить кэш и файлы cookie в текущем браузере.

    Если после проверки всех вышеперечисленных причин проблема с куками все еще остается, попробуйте обратиться к документации вашего сервера или языка программирования для более детальной информации о настройке кук.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно