Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Активные темы » Отправка данных формы CURL

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Как выяснить хотя бы, то что весь код CURL выполняется в пределах одной сессии? То есть в момент передачи POST не открывается новая сессия
 
Добавлено:
Нашел на странице такой кусочек интересного кода:

Код:
 
var token = "CfDJ8Pj1S8DdfZlAigez8TXM6pDnpWWxGEbAHrFRXbF2ooBWpQo5M-tqaQmWZ9BiVyBw9qce8rQX0rYAXL1o6gDekY5tCu_HtX8XSJyc-yd228qAEMk5jiY_PCi6Z5SSft8VvOJNzDx_w3TtRb-nF083Dy3C2-Af7MYFz25oI5faBEeOxid5_fNm4mHqdP9sHBdpgQ";
 
        $.ajaxPrefilter(function(options, originalOptions, jqXhr) {
            if (/^(\w+?\/\//i.test(options.url)) {
                //Absoulte URI
                return;
            }
            switch (options.type.toLowerCase()) {
            case "get":
            case "head":
            case "trace":
            case "options":
                break;
            default:
                options.headers = options.headers || {};
                options.headers["X-Taximeter-Antiforgery"] = token;
                break;
            };
        });
        jQuery(function($) {
            $(document).on("submit",
                "form",
                function() {
                    var form = $(this);
                    if (/^(\w+?\/\//i.test(form.attr("action"))) {
                        //Absoulte URI
                        return;
                    }
                    switch (form.prop("method").toLowerCase()) {
                    case "":
                    case "get":
                    case "head":
                    case "trace":
                    case "options":
                        break;
                    default:
                        var inp = form.find("[name=__RequestVerificationToken]");
                        if (!inp.length) {
                            inp = $("<input type='hidden' name='__RequestVerificationToken'/>");
                            inp.val(token);
                            form.append(inp);
                        }
                        break;
                    };
                });
        });
 

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 09:57 13-09-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011

Цитата:
странице такой кусочек интересного кода:  
 

всего лишь добавляет токен в отправляемые формы

Цитата:
inp = $("<input type='hidden' name='__RequestVerificationToken'/>");  

и в заголовки ajax запроса.

Цитата:
options.headers["X-Taximeter-Antiforgery"] = token;  

 

Цитата:
То есть в момент передачи POST не открывается новая сессия  

сравнивать идентификаторы сессии - если одинаковые, то и должно быть в пределах одной.  
 
можно попробовать симитировать обычный POST запрос без данных и кучи заголовков - посмотреть какой ответ будет у сервера.

Всего записей: 15100 | Зарегистр. 20-09-2014 | Отправлено: 20:09 13-09-2018 | Исправлено: Mavrikii, 20:11 13-09-2018
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
То есть это X-Taximeter-Antiforgery = токен нужно все таки добавить в header?  
 

Цитата:
можно попробовать симитировать обычный POST запрос без данных и кучи заголовков - посмотреть какой ответ будет у сервера.

 
Пробовал, получил в заголовке HTTP/1.1 200 OK, а в теле одни иероглифы.
 
Добавлено:
Все session_id одинаковые
 
Добавлено:
В заголовке еще вот это "Content-Encoding: gzip"

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 07:15 14-09-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011

Цитата:
Пробовал, получил в заголовке HTTP/1.1 200 OK, а в теле одни иероглифы

значит нормальный ответ все же 200, надо сравнивать и смотреть что не так отправляется.

Цитата:
То есть это X-Taximeter-Antiforgery = токен нужно все таки добавить в header?

если имитируете браузер, то отправлять то, что отправляет он. этот заголовок отправляется не всегда.
 

Цитата:
В заголовке еще вот это "Content-Encoding: gzip"

когда ответ от сервера приходит в сжатом виде

Всего записей: 15100 | Зарегистр. 20-09-2014 | Отправлено: 07:25 14-09-2018 | Исправлено: Mavrikii, 07:27 14-09-2018
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добавил в код

Код:
 
curl_setopt($common_gett, CURLOPT_ENCODING, 'gzip');
 

Иероглифы пропали.  
Но при попытке отправки, снова  

Код:
 
HTTP/1.1 400 Bad Request
Server: nginx/1.12.2
Date: Fri, 14 Sep 2018 04:30:14 GMT
Content-Length: 0
Connection: keep-alive
Set-Cookie: .AspNetCore.Culture=c%3Dru%7Cuic%3Dru; path=/
Set-Cookie: culture_set=1; path=/
 

 
Добавлено:
Вот чую, что нужно как то отправить именно два параметра valid, один со значением true, второй false. Но как, я не знаю

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 07:31 14-09-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011

Цитата:
Но как, я не знаю

строкой добавить, но я думаю, что не в этом дело.

Всего записей: 15100 | Зарегистр. 20-09-2014 | Отправлено: 07:36 14-09-2018
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
На форме два input с name=valid, одно true, другое false.
Как строкой добавить? не понял

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 07:39 14-09-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011

Цитата:
Как строкой добавить? не понял

ну блин.

Код:
curl_setopt($common_gett, CURLOPT_POSTFIELDS, http_build_query($data) . '&valid=..');

Всего записей: 15100 | Зарегистр. 20-09-2014 | Отправлено: 07:40 14-09-2018 | Исправлено: Mavrikii, 07:41 14-09-2018
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Дело не в этом, снова 400 Bad Request.
Походу все, вариантов нет?

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 07:50 14-09-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011

Цитата:
Походу все, вариантов нет?

ковыряйтесь, что то упускаете.  
 
не "потрогав" самостоятельно сложно подсказать в чем может быть дело.

Всего записей: 15100 | Зарегистр. 20-09-2014 | Отправлено: 07:56 14-09-2018
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Доступ дам, сможешь помочь?  
 
Добавлено:
Не пойму как у них там устроенно все.
Есть ссылка

Код:
 
https://lk.taximeter.yandex.ru/support/compensation/
 

Есть ID уникальных заказов, например  

Код:
 
fb1467de6b2b4fb6be40836dd3bab271
 

Формирует ссылку такого вида  

Код:
 
https://lk.taximeter.yandex.ru/support/compensation/fb1467de6b2b4fb6be40836dd3bab271
 

Получаем форму для отправки заявки, причем если поставить вместо уникального значения что угодно, например 12345, то снова получаем эту же форму. При отправки которой естественно получаем ошибку. Мне не понятно, то, что:

Код:
 
<form action="/support/compensation/fb1467de6b2b4fb6be40836dd3bab271 method="post">
 

Ну и соответственно  

Код:
 
<form action="/support/compensation/12345 method="post">
 

Что получается, куда отправляет форма данные? Если 12345 просто не существует
 
Добавлено:
Причем если после отправки оставить форму открытой на время, получаем вот что:

Код:
 
POST https://lk.taximeter.yandex.ru/support/compensation/12345 -> 404 Not Found -> 86ms        
POST /online -> 200 OK -> 72ms    
POST /online -> 400 Bad Request -> 94ms    
 

 
Что за /online ???
 
Добавлено:
И что делает вот эта часть кода

Код:
 
$(document).on("submit",
                "form",
                function() {
                    var form = $(this);
                    if (/^(\w+?\/\//i.test(form.attr("action"))) {
                        //Absoulte URI
                        return;
                    }
                    switch (form.prop("method").toLowerCase()) {
                    case "":
                    case "get":
                    case "head":
                    case "trace":
                    case "options":
                        break;
                    default:
                        var inp = form.find("[name=__RequestVerificationToken]");
                        if (!inp.length) {
                            inp = $("<input type='hidden' name='__RequestVerificationToken'/>");
                            inp.val(token);
                            form.append(inp);
                        }
                        break;
                    };
                });
 

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 10:47 14-09-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011

Цитата:
Что получается, куда отправляет форма данные? Если 12345 просто не существует  

все отправляется в один скрипт, который уже проверяет есть заявка или нет.
 

Цитата:
Что за /online ???  

откуда я знаю? просто проверка чего то или регулярное обновление данных на странице с помощью ajax
 

Цитата:
И что делает вот эта часть кода  

я же описывал. при отправке формы, за исключением некоторых видов url, проверяет есть ли в форме поле с токеном безопасности, и если нет, то добавляет его.

Всего записей: 15100 | Зарегистр. 20-09-2014 | Отправлено: 20:49 14-09-2018
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Интернет » Web-программирование » Активные темы » Отправка данных формы CURL


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru