Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2017, 12:29   #1
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию POST на сайт: что и как запросить?

Здравствуйте!
Не могу разобраться с сайтом Теремка... Вообще плохо владею Post'ом и не могу его понять. Пытался даже репетитора нанять, но первый заход получился неудачным, на второй нет финансов. Может, хоть с конкретной темой помогут местные гуру?
Вот страница
http://teremok.ru/menu/bliny_sytnye/...hinoy_i_syrom/
Цена появляется только после выбора конкретного места. Места прописаны в коде - можно распарсить. Но цены в коде нет. Есть какие-то коды JS. В том числе увидел такие строчки:
Код:
	$.post(document.location+"", {addr_id:addr_id}, function(){
		//document.location = "/address/";
Какой-то addr_id я находил при мониторинге запроса (на сколько умею) в хроме через F12 с включённым Preserve log на вкладке Network.
Как я понял, при нажатии кнопки "выбрать" на страницу выбранного продукта идёт запрос. В Form data передаётся как раз этот ID. Он совпадает с тем, который можно распарсить в коде рядом с выбранным местом. Например, для ТЦ Звёздочка addr_id = 525.
Можно ли как-то проверить post-запрос в самом хроме?
Как понять что ещё обязательно нужно для запроса и как сформировать сам запрос? (через idHTTP)
Ship_1 вне форума Ответить с цитированием
Старый 14.12.2017, 13:00   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Можно ли как-то проверить post-запрос в самом хроме?
Как понять что ещё обязательно нужно для запроса и как сформировать сам запрос? (через idHTTP)
В инструментах хрома смотрите:

Network - Headers - Request headers и Query String Parameters. Там и готовый пост-запрос, и все его параметры.

В целом не совсем понятно, что Вы хотите. Если в ответ на пост-запрос хотите получить цену, то в данном случае это не сработает: пост отправляет только команду "Найти и показать цену на текущей странице для текущего выбранного id товара за текущую дату". Соответвенно, все остальные операции выполняются "внутри" сайта.

Чтобы отдавать цену наружу по запросу - сайт должен иметь собственное API.
Изображения
Тип файла: png Request.PNG (86.8 Кб, 126 просмотров)
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 14.12.2017, 15:27   #3
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
Если в ответ на пост-запрос хотите получить цену, то в данном случае это не сработает: пост отправляет только команду "Найти и показать цену на текущей странице для текущего выбранного id товара за текущую дату".
Что-то я не понял. Пост отправляет команду "найти и показать цену". Показать где? На странице, которую забирает idHTTP.Post? Тогда оттуда же и можно как раз получить саму цену, парсингом.
Ship_1 вне форума Ответить с цитированием
Старый 14.12.2017, 15:43   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Пост ничего не командует и не показывает, это просто 4 буквы в тексте HTTP запроса, который читает сервер и что-то (HTML, JSON, картинку, ...) отправляет в ответ.

Изучайте основы HTTP и вкладку Network в DevTools.

Если у сайта нет API, то взять HTML (или что там) из ответа и парсить любой библиотекой для парсинга HTML (обычно с помощью CSS селекторов или XPath запросов).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 14.12.2017 в 15:46.
Alex11223 вне форума Ответить с цитированием
Старый 14.12.2017, 16:19   #5
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Пост ничего не командует и не показывает
Ну да, это я неточно выразился. Пост в данном случае отправляет такой запрос, который движок сайта понимает как "найти и показать цену". Ну и предоставляет какой-то ответ (можно посмотреть на вкладке Response, если что).
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 14.12.2017, 16:27   #6
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Там много строк в поле Name. Как понять какую смотреть? Смотрю ту, которая совпадает с адресом страницы продукта.
Этот вариант цену в ответной странице не дал. Хотя, вроде, всё повторил. Кроме "посторонних" куки.
Код:
  TmpStrL:=TStringList.Create;
  IdHTTP1.Request.Accept:='*/*';
  idHTTP1.Request.CustomHeaders.Add('X-Requested-With: XMLHttpRequest');
  IdHTTP1.Request.Accept:='text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
  IdHTTP1.Request.AcceptEncoding:='gzip, deflate';
  IdHTTP1.Request.AcceptLanguage:='ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7';
  IdHTTP1.Request.Connection:='keep-alive';
  IdHTTP1.Request.ContentLength:=11;
  IdHTTP1.Request.ContentType:='application/x-www-form-urlencoded; charset=UTF-8';
  idHTTP1.Request.CustomHeaders.Add('Cookie: TEREMOK_CURRENT_CITY=msk; TEREMOK_IS_MOBILE_VERSION=N');
  IdHTTP1.Request.Host:='teremok.ru';
  IdHTTP1.Request.Referer:='http://teremok.ru/menu/dobavki_v_bliny_i_kashi/mayonez/';
  IdHTTP1.Request.UserAgent:='Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36';
  idHTTP1.Request.CustomHeaders.Add('addr_id: 525');
  try
  TmpStrL.Text:=IdHTTP1.Get('http://teremok.ru/menu/dobavki_v_bliny_i_kashi/mayonez/');
  except on e:Exception do ShowMessage(e.ToString);
  end;
Ship_1 вне форума Ответить с цитированием
Старый 15.12.2017, 09:53   #7
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Мне только кажется, что минимум 10% из тех, кто отвечает в этом форуме на вопросы про Delphi, могут разобраться с этой задачей за 10 минут?
Ship_1 вне форума Ответить с цитированием
Старый 15.12.2017, 10:22   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от Ship_1 Посмотреть сообщение
минимум 10% из тех, кто отвечает в этом форуме на вопросы про Delphi, могут разобраться с этой задачей за 10 минут?
То есть 1-2 человека?)


Цитата:
Сообщение от Ship_1 Посмотреть сообщение
Там много строк в поле Name.
Каждая строка это отдельный HTTP запрос.
Цитата:
Сообщение от Ship_1 Посмотреть сообщение
Как понять какую смотреть?
Смотреть все если непонятно какой именно нужен.

Там можно отфильтровать по типу запроса/содержимого: XHR (ajax), скрипты, картинки и т.п.
Обычно все интересующее в XHR (запросы отправленные из JS) и в Doc (сама страница, иногда еще всякие документы, как правило ненужные).

document.location скорее всего означает, что оно отправляет POST запрос на адрес текущей страницы.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 15.12.2017 в 10:27.
Alex11223 вне форума Ответить с цитированием
Старый 15.12.2017, 11:03   #9
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
То есть 1-2 человека?)
Ну хотя бы )
Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Смотреть все если непонятно какой именно нужен.
А чего искать-то хоть? Можно как-то понять в каком именно запросе появляется цена поиском по содержимому запросов-ответов?
Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Обычно все интересующее в XHR (запросы отправленные из JS) и в Doc (сама страница, иногда еще всякие документы, как правило ненужные).
Посмотрел. Оказалось, как раз в xhr и передаётся то, что я перечислил в idHTTP1.Request парой сообщений выше. Но не получается. Возвращается страница без появления стоимости.
Ship_1 вне форума Ответить с цитированием
Старый 15.12.2017, 11:45   #10
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
цена поиском по содержимому запросов-ответов?
Да ну уже определились же, что цена там не возвращается. Нужно так:

Цитата:
Если у сайта нет API, то взять HTML (или что там) из ответа и парсить любой библиотекой для парсинга HTML
Только тут JSON в ответе, а не HTML. По идее, после отправки пост-запроса нужно снова выполнить GET к тому же адресу и получить HTML-код страницы, где цена уже должна быть.

Собственно, если смотреть в браузере на вкладке Doc - это вот это поле:

Код:
<div class="price"><span>173</span> руб</div>
Изображения
Тип файла: png Get.PNG (75.4 Кб, 121 просмотров)
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 15.12.2017 в 11:48.
Sciv вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как запросить значение ячейки конкретной строки в листе Excel через запрос? intersk Microsoft Office Access 0 27.03.2015 21:01
как скопировать весь сайт включая все что подключается в js goluzov HTML и CSS 3 17.11.2011 18:14
Как запросить логин с которым пользователь входит в комп? Dorvir Microsoft Office Excel 2 18.06.2008 13:09
сайт в FireFox выглядит на 5+ , а вот в Explorer как не знаю что Мышь в полоску HTML и CSS 4 24.10.2007 18:43