Форум программистов, компьютерный форум, киберфорум
Delphi: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/74: Рейтинг темы: голосов - 74, средняя оценка - 4.69
1 / 1 / 0
Регистрация: 04.07.2014
Сообщений: 47

TChromium (dcef3): как правильно сформировать POST запрос

28.07.2014, 13:18. Показов 16772. Ответов 67
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго здоровья!
Прошу помощи в формировании правильного POST запроса.
Известно все, что нужно отправить. Неизвестно как правильно это оформить.

Использовать надо TChromiumOCR (dcef3).

Тампердадой установлено что нужно отправить:
-Заголовки запроса:
Host, User-Agent, Accept, Accept-Language, Accept-Encoding, Content-Type, Referer, Content-Length, Origin, Cookie, Connection, Pragma, Cache-Control

-Сообщение:
sessionid=(...)&currency(...)=&subtotal= (...)&fee=(*)&total=(...)

Код такой:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
function CreateField(const AValue: AnsiString): ICefPostDataElement;
begin
 Result := TCefPostDataElementRef.New;
 Result.SetToBytes(Length(AValue), PAnsiChar(AValue));
end;
 
//*****************************************
 
procedure POST(total, fee: integer);
var
 Header: ICefStringMultimap;
 Data: ICefPostData;
 Request: ICefRequest;
 Cook: ICefCookieManager;
begin
 Request := TCefRequestRef.New;
 Request.Url := '';
 Request.Method := 'POST';
 Request.Flags:=[UR_FLAG_ALLOW_CACHED_CREDENTIALS,UR_FLAG_ALLOW_COOKIES];
 
 Header := TCefStringMultimapOwn.Create;
 Header.Append('Host', '(...)');
 Header.Append('User-Agent', '(...)');
 Header.Append('Accept', '(...)');
 Header.Append('Accept-Language', '(...)');
 Header.Append('Accept-Encoding', '(...)');
 Header.Append('Content-Type', '(...)');
 Header.Append('Referer', '(...)');
 Header.Append('Content-Length', '(...)');
 Header.Append('Origin', '(...)');
 Header.Append('Connection', '(...)');
 Header.Append('Pragma', '(...)');
 Header.Append('Cache-Control', '(...)');
 
 Header.Append('Cookie',(...));
 ...
 Header.Append('Cookie',(...));
 
 Request.SetHeaderMap(Header);
 
 Data := TCefPostDataRef.New;
 Data.AddElement(CreateField('sessionid='+SessionID));
 Data.AddElement(CreateField('&currency=5'));
 Data.AddElement(CreateField('&subtotal='+inttostr(total-fee)));
 Data.AddElement(CreateField('&fee='+IntToStr(fee)));
 Data.AddElement(CreateField('&total='+IntToStr(total)));
 
 Request.PostData := Data;
 
 form1.Chromium1.Browser.MainFrame.LoadRequest(Request);
end;
Сомнения и вопросы:
- Где то видел, что в конце строки POST запроса надо добавлять "\r\n". Надо ли?
- Надо ли добавлять строку "POST http://www.site.ru HTTP/1.1\r\n"?
- Некоторые данные извлекаются из куки файлов в закодированном (utf-8) виде. Content-Type в данном запросе = "application/x-www-form-urlencoded; charset=UTF-8". В каком виде надо отправлять данные: как есть в utf-8 или декодировать в win1251?
- В коде параметр Request.Flags указывает на использование куки файлов. Нипанятна же... надо вручную прописывать заголовок "Cookie" или нет.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.07.2014, 13:18
Ответы с готовыми решениями:

Правильно сформировать POST-запрос
Доброго дня! Есть POST запрос который нормально отправляется через утилиту CURL. Вот ее вид: curl.exe -v -F "ufile=@<тут...

Получение кода страницы TChromium DCEF3
Привет, гуру. Необходимо получать код страницы, загруженной в хромиум, из главного потока приложения и из созданного мной....

Delphi 7 + TChromium (DCEF3) = Flash Player Not Working
Установил на Delphi 7 компонент TChromium, новенький DCEF3. Помимо прочих непонятных глюков: Flash Player не работает - лишь предлагает...

67
74 / 62 / 26
Регистрация: 05.08.2014
Сообщений: 218
08.08.2014, 16:21
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Avazart Посмотреть сообщение
Вы просто не авторизуетесь, если там авторизация на js завязана ( по крайней мере баз анализа js и их воспроизведения средствами Delphi)
Так вот я вам и говорю, что можно авторизоваться. В данном случае нужно применить такой же алгоритм шифрования пароля, далее POST запрос, куки применяются автоматом, вся шляпа в виде токенов, приходящих в ответе от сервера, используется нами уже без всяких танцев с бубном.

Добавлено через 1 минуту
так все-таки? "Вы просто не авторизуетесь..." или "вы не авторизуетесь так просто?"
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.08.2014, 16:31
Я привел цитату, я не виноват, если не вы не умеете читать внимательно.

Более того я описал как решил конкретную проблему без браузера и сколько ушло на это времени приблизительно.
0
74 / 62 / 26
Регистрация: 05.08.2014
Сообщений: 218
08.08.2014, 16:46
Цитата Сообщение от Avazart Посмотреть сообщение
Я привел цитату, я не виноват, если не вы не умеете читать внимательно.
Как раз я читаю внимательно, а вот если бы вы выразились четче, то вас бы поняли сразу. А так по вашим словам получается, что если авторизация завязана на js, то при помощи IdHTTP авторизоваться не получится, что и было опровергнуто.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.08.2014, 17:21
Цитата Сообщение от TooHot Посмотреть сообщение
то при помощи IdHTTP авторизоваться не получится
Естественно не получится, ибо дополнительно нужно реализовывать обработку скрипта руками, тут нет противоречий.
0
74 / 62 / 26
Регистрация: 05.08.2014
Сообщений: 218
08.08.2014, 17:39
Цитата Сообщение от Avazart Посмотреть сообщение
Естественно не получится, ибо дополнительно нужно реализовывать обработку скрипта руками, тут нет противоречий.
вы снова за старое. Допустим мы написали функцию, которая ковертит наш пароль. а POST запрос мы не с IdHTTP посылать будем?

Добавлено через 5 минут
это тупо как маленький вариант, набросал, чтобы вы наконец поняли
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var
  PostData: TStringLIst;
  result: String;
begin
  PostData:= TStringList.Create;
  try
    PostData.Add('logon=' + Username);
    PostData.Add('password=' + NASHA_FUNCTION(NASH_PASSWORD));
    HTTP.Request.Accept:= 'bla-bla';
    HTTP.Request.Referer:= HTTP.URL.GetFullURI(); //из предыдущего запроса
    //еще всякое бла-бла
    try
      result:= HTTP.Post('https://www.example.com/users/login.html', PostData);
    except
      //bla-bla
    end;
  finally
    PostData.Free;
  end;
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.08.2014, 17:55
Цитата Сообщение от TooHot Посмотреть сообщение
Допустим мы написали функцию
Вы для начала напишите, и увидите какой не "маленький" пример у вас выйдет

Это реально смешно, ибо одно дело написать две строчки для перекидывания куков и другое дело реализовать шифрование RSA по исходникам js.

По этому если работа идет только с одного аккаунта, то в таких махинациях абсолютно нет смысла.
0
Заблокирован
08.08.2014, 20:36
TooHot, а как настроить этот фиблер? подключил к нему браузер, сертификат установил, конектюсь по https, он ловит, но где то режет картинки, так как в браузере всё без графики, как победить то эти происки сатаны?
0
74 / 62 / 26
Регистрация: 05.08.2014
Сообщений: 218
08.08.2014, 22:59
Цитата Сообщение от Avazart Посмотреть сообщение
Вы для начала напишите, и увидите какой не "маленький" пример у вас выйдет
Это реально смешно, ибо одно дело написать две строчки для перекидывания куков и другое дело реализовать шифрование RSA по исходникам js.
Не съезжайте с темы как маленький мальчик, вам доказано, что авторизоваться при помощи IdHTTP можно, а "маленький" или большой пример - это другой вопрос.
И прежде чем ухмыляться, проанализировали бы rsa.js код, там его не много из того, что нужно или вы испугались незнакомых буковок? Садитесь - два!
И "BigInteger" вы тоже не удосужились посмотреть. Проявляете свою неграмотность, батенька. Садитесь - два!
Плюс ко всему Indy имеет такой же стандартный набор кодеров/декодеров, Base64 в том числе.

Добавлено через 1 минуту
Цитата Сообщение от Сиськохват Посмотреть сообщение
а как настроить этот фиблер? подключил к нему браузер, сертификат установил, конектюсь по https, он ловит, но где то режет картинки, так как в браузере всё без графики, как победить то эти происки сатаны?
Если вы смотрите прямо в фиддлере, то картинки могут быть урезаны, конечно. Ведь он загружает контент веб страницы, а внутри нее могут быть относительные пути.
0
Заблокирован
08.08.2014, 23:44
Цитата Сообщение от TooHot Посмотреть сообщение
Если вы смотрите прямо в фиддлере, то картинки могут быть урезаны, конечно. Ведь он загружает контент веб страницы, а внутри нее могут быть относительные пути.
Не добавил сертификат фидлера в доверенные в браузере, вот он и резал, как добавил, всё заработало.
0
74 / 62 / 26
Регистрация: 05.08.2014
Сообщений: 218
08.08.2014, 23:53
Цитата Сообщение от Сиськохват Посмотреть сообщение
Не добавил сертификат фидлера в доверенные в браузере, вот он и резал, как добавил, всё заработало.
хм, насколько я знаю сертификат нужен фиддлеру для расшифровки HTTPS трафика. А вы в настройках поставили decrypt HTTPS, но не добавили созданный фиддлером сертификат?
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.08.2014, 23:57
TooHot, А вы вообще что курите ну или у вас со зрением плохо?

Ибо я изначально писал что :
Вы просто не авторизуетесь, если там авторизация на js завязана ( по крайней мере без анализа js и их воспроизведения средствами Delphi)

К примеру для авторизации на steam пришлось неделю пыхтеть на js, и задействовать библиотеки для длинной арифметики что бы пройти авторизацию которое использует специфический rsa.
Т.е. я решил задачу, но это потратило слишком много времени. Что вы кому пытались доказать я не знаю, вероятно своей "второй" личности, но при чем тут форум не понятно.
0
74 / 62 / 26
Регистрация: 05.08.2014
Сообщений: 218
09.08.2014, 00:17
Курю я kent , хотя курить - плохая затея. А вот это
Цитата Сообщение от Avazart Посмотреть сообщение
и задействовать библиотеки для длинной арифметики что бы пройти авторизацию которое использует специфический rsa
меня действительно вставляет!

А началось все вот с этой ереси

Молодец вы в том, что все-таки решили задачу.
Не молодец вы в том, что способны исторгать подобную ересь, ничего не зная о человеке и его опыте.
0
Заблокирован
09.08.2014, 00:27
Цитата Сообщение от TooHot Посмотреть сообщение
А вы в настройках поставили decrypt HTTPS, но не добавили созданный фиддлером сертификат?
Ну типо того.
0
74 / 62 / 26
Регистрация: 05.08.2014
Сообщений: 218
09.08.2014, 00:40
Сиськохват, я имею в виду, вы нажали кнопку нет, когда он предложил вам установить сертификат?
Если так, то все верно и его поведение соответствует документации по FiddlerCore
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
09.08.2014, 00:52
Цитата Сообщение от TooHot Посмотреть сообщение
ничего не зная о человеке и его опыте.
Я предположил и я не ошибся.
0
74 / 62 / 26
Регистрация: 05.08.2014
Сообщений: 218
09.08.2014, 00:57
Цитата Сообщение от Avazart Посмотреть сообщение
Я предположил и я не ошибся.
Обоснуйте!
0
1 / 1 / 0
Регистрация: 04.07.2014
Сообщений: 47
11.08.2014, 12:00  [ТС]
Я надеюсь, вы закончили.

Вернемся к теме.

Стим. Да. Как я уже говорил, я пишу бот для торговой площадки и мне нужен рабочий запрос на покупку лота.
Запрос, перехваченный Тампердатой, довольно таки простой. никакого РСА или чего-нибудь еще. Но тем не менее почему то не работает. Возвращаемая ошибка - 502
полностью код формирования запроса выглядит так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
function CreateField(const AValue: AnsiString): ICefPostDataElement;
begin
  Result := TCefPostDataElementRef.New;
  Result.SetToBytes(Length(AValue), PAnsiChar(AValue));
end;
 
//******************************************************************************
procedure POST(total, fee: integer);
var
  Header: ICefStringMultimap;
  Data: ICefPostData;
  Request: ICefRequest;
  Cook: ICefCookieManager;
begin
  Request := TCefRequestRef.New;
  Request.Url := 'https://steamcommunity.com/market/buylisting/'+ ListingID;
  Request.Method := 'POST';
  //Request.Flags := [UR_FLAG_ALLOW_CACHED_CREDENTIALS,UR_FLAG_ALLOW_COOKIES];
  Header := TCefStringMultimapOwn.Create;
  Header.Append('Host', 'steamcommunity.com');
  Header.Append('User-Agent', 'Mozilla/5.0 (Windows NT 5.1; rv:30.0) Gecko/20100101 Firefox/30.0');
  Header.Append('Accept', '*/*');
  Header.Append('Accept-Language', 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3');
  Header.Append('Accept-Encoding', 'gzip, deflate');
  Header.Append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');  
  Header.Append('Referer','http://steamcommunity.com/market/listings/570/Collar%20of%20Command/render/?query=&search_descriptions=0&start=0&count=10&country=RU&language=russian&currency=5');
  //Header.Append('Referer', 'http://steamcommunity.com/market/listings/570/Collar%20of%20Command');
  Header.Append('Origin', 'http://steamcommunity.com');
  Header.Append('Connection', 'keep-alive');
  Header.Append('Pragma', 'no-cache');
  Header.Append('Cache-Control', 'no-cache');
  Header.Append('Content-Length', Form1.Edit5.Text);
  Header.Append('Cookie','Steam_Language='+Steam_Language);
  Header.Append('Cookie','timezoneOffset='+timezoneOffset);
  Header.Append('Cookie','steamRememberLogin='+steamRememberLogin);
  Header.Append('Cookie','sessionid='+SessionID);
  Header.Append('Cookie','steamLogin='+steamLogin);
  Header.Append('Cookie','steamCC_46_52_135_42='+steamCC_46_52_135_42);
  Header.Append('Cookie','webTradeEligibility='+webTradeEligibility);
  Header.Append('Cookie','__utma='+__utma);
  Header.Append('Cookie','__utmz='+__utmz);
  Header.Append('Cookie','__utmb='+__utmb);
  Header.Append('Cookie','__utmc='+__utmc);
  
  Request.SetHeaderMap(Header);
 
  Data := TCefPostDataRef.New;
 
  Data.AddElement(CreateField('sessionid='+SessionID));
  Data.AddElement(CreateField('&currency=5'));
  Data.AddElement(CreateField('&subtotal='+inttostr(total-fee)));
  Data.AddElement(CreateField('&fee='+IntToStr(fee)));
  Data.AddElement(CreateField('&total='+IntToStr(total)));
 
  Request.PostData := Data;
 
  form1.Chromium1.Browser.MainFrame.LoadRequest(Request);
  
end;
//******************************************************************************
Добавлено через 1 час 31 минуту
Поставил httpAnalyser 7. Программа отправляет все как Тампердата показывает.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.08.2014, 13:04
Цитата Сообщение от Алешенька Посмотреть сообщение
Поставил httpAnalyser 7.
И ?
Цитата Сообщение от Алешенька Посмотреть сообщение
Программа отправляет все как Тампердата показывает.
Значит не все так, смотрите внимательнее, в том числе на куки и содержание заголовком.

Добавлено через 3 минуты
5xx Server Error («Ошибка сервера»)

Коды 5xx выделены под случаи неудачного выполнения операции по вине сервера. Для всех ситуаций, кроме использования метода HEAD, сервер должен включать в тело сообщения объяснение, которое клиент отобразит пользователю.
https://ru.wikipedia.org/wiki/... 0.B8.D1.8F

Что сервер в объяснении пишет ?
1
1 / 1 / 0
Регистрация: 04.07.2014
Сообщений: 47
11.08.2014, 13:14  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Что сервер в объяснении пишет ?
сервер пишет:
"There was a problem purchasing your item. The listing may have been removed. Refresh the page and try again."
0
1 / 1 / 0
Регистрация: 04.07.2014
Сообщений: 47
13.08.2014, 09:41  [ТС]
Chromium сам добавляет заголовок Cache-control, а в Accept вместо указанного "*/*" ставит что-то подлинее.
Может это быть причиной 502й ошибки?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.08.2014, 09:41
Помогаю со студенческими работами здесь

TChromium узнать значения POST
Как возможно, узнать\получить данные POST запроса? Простой пример.. при авторизации с помощью JS жмём кнопу и т.п. и на сайт уходя...

После закрытия программы c TChromium (dcef3) выскакивает AV
Здравствуйте. Вот такая проблема. Ставил TChromium на XE3. Прикол в том, что в аналогичном проекте в Delphi такой проблемы нет. ...

Как правильно составить запрос POST
req:='POST https://signin.ebay.com/ws/eBayISAPI.dll?SignIn HTTP/1.0'#13#10+ 'Content-Type: application/x-www-form-urlencoded'#13#10+ ...

Http POST запрос, как правильно написать
Добрый день, мне нужно отправить данные на сервер, посредством http post запросом, нужно добавить автомобиль, сам пост запрос выглядит вот...

Как правильно отправить POST запрос с массивом?
Доброго времени суток. Не могу понять, как отправить POST запросом массив на сервер, из C#. Нужно для добавления контакта в amoCRM. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Модель здравосохранения 14. Собираем всю модель вместе.
anaschu 22.05.2026
Модель собрана. В будущих постах на видео я покажу, как она работает. В этом посте запускаем её, проверяем результаты и разбираем что можно с ней делать дальше. Перед запуском проверяем. . .
Модель здравоохранения 13. Добавление самой системы здравоохранения.
anaschu 22.05.2026
В предыдущем посте мы настроили болезни. Теперь добавим события, которые управляют здоровьем всего коллектива, а также настроим рабочий график и расчёт финансов. В Main создаём четыре события. . . .
Модель здравоохранения 12. добавление болезней через ресурпул, как аварии
anaschu 22.05.2026
Болезни — это ключевая часть нашей модели. Нам нужно, чтобы работник периодически уходил на больничный, его задание при этом зависало, а после выздоровления работа возобновлялась. Реализуем это двумя. . .
Модель здравоохранения 11. Создаём классы Задание и Работник
anaschu 22.05.2026
В AnyLogic каждая заявка и каждый ресурс — это объект определённого класса. Нам нужно создать два класса: Задание (заявка) и Работник (ресурс). Класс Задание В дереве проекта нажимаем правой. . .
Модель здравоохранения 10. Новая модель, смотрим, как добавлять логические блоки, и что писать внутри
anaschu 22.05.2026
Открываем AnyLogic, создаём новый проект. В дереве проекта появляется класс Main — это главный агент, в котором будет жить вся наша логика. Палитра блоков Слева находится палитра. Нас интересует. . .
модель ЗдравоСохранения 9. Новая модель, разбираемся, как ее создавать
anaschu 22.05.2026
В этой серии постов мы построим модель небольшого рабочего коллектива. Сотрудники получают задания, выполняют их, иногда болеют — и мы хотим посчитать, сколько это стоит компании. Метод. . .
[golang] Linked list
alhaos 22.05.2026
Связный список / Linked list Связный список структура данных позволяющая хранить список значений, в отличии от массива в памяти хранится не сплошным куском, а отдельными частями которые ссылаются. . .
[golang] Двоичная куча, min-heap
alhaos 20.05.2026
Двоичная куча Двоичная куча — структура данных, которая всегда держит самый важный элемент наготове. Представьте очередь к хилеру в игре, и очередь из игроков в приоритете те у кого меньше. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru