| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Сети > POST запрос |
| Автор: rudolfninja 6.12.2015, 12:09 |
| Ребята, приветствую. Т.к. в теме сетевого программирования не совсем силен, то вопросы могут показаться глупыми. В общем, проблема такая: мне надо из приложения отправлять post запрос на www.kinopoisk.ru с названием фильма, информацию о котором мне надо найти. А в ответ получить картинку фильма, год выпуска, режиссера, актеров и жанр. Собственно, в чем пока что вопросы: 1) Как сформулировать этот запрос? Куда именно подставлять название фильма? 2) На кинопоиске если ввести название фильма (например Психо), то он покажет целый список результатов. Как в этом случае получить фильм, который первый в списке? Спасибо. |
| Автор: rudolfninja 6.12.2015, 12:59 | ||||||||||
Если отправить такой запрос, то вы итоге зависаю на получении ответа. Если без слова "GET", то получаю вот такой ответ:
Переделал запрос так:
Потом отправляю его:
В итоге такой ответ:
|
| Автор: volatile 6.12.2015, 13:08 | ||
rudolfninja, GET запрос, это просто ссылка Вот http://www.kinopoisk.ru/index.php?first=yes&what=&kp_query=%D0%9F%D1%81%D0%B8%D1%85%D0%BE Открывается у вас в браузере? Если да, то тогда в чем проблема? Ваша программа может открывать ссылки?? |
| Автор: rudolfninja 6.12.2015, 13:45 |
Открывается, но когда отправляю запрос программно, то вылетает ошибка, типа сильно много запросов с моего ip. Моя программа получает ответ на запрос. |
| Автор: feodorv 6.12.2015, 14:14 |
Интересно, какое именно имя хоста Вы туда отправляете |
| Автор: volatile 6.12.2015, 14:18 | ||||
ну там же не так, а как-то так
|
| Автор: rudolfninja 6.12.2015, 16:31 |
Ну так я потом исправился. |
| Автор: feodorv 6.12.2015, 17:30 |
Так каков в итоге HTTP-запрос? |
| Автор: rudolfninja 6.12.2015, 17:51 | ||
|
| Автор: feodorv 6.12.2015, 19:10 | ||||
Значит, на сайте стоит какая-то защита. Стер все свои куки. Браузер отправил такой запрос:
Получил такой ответ:
Далее шла загэзипленная страница. Сильное подозрение, что сайт работает только с зазипованным html текстом. |
| Автор: rudolfninja 6.12.2015, 20:30 | ||||
То есть, в ответе было содержимое этой страницы, которое можно как-то преобразовать в нормальный вид? Сделал такой запрос:
В итоге повисаю на функции
Может ли это быть потому, что данные слишком большие? UPD: Нашел в чем проблема была. Проблема была в том, что в конце HTTP запроса надо было вставить пустую строку. Теперь ответ нормально выводится на экран (или в файл) только если я под отладчиком прохожу все итерации цикла приема сообщений. Без отладчика ничего не выводится (ни на экран, ни в файл). Как быть в этом случае? Создавать отдельный поток? И еще вопрос, что храниться в этом gzip сообщении и как его расшифровать? |
| Автор: rudolfninja 6.12.2015, 23:46 |
| feodorv, а не подскажете еще, какими средствами вы узнали, что запрос будет именно такой? |
| Автор: feodorv 7.12.2015, 09:55 | ||||
Лучше сократить Referer до "http://www.kinopoisk.ru/" и попробовать сделать Connection "close" (с этим сайтом может и не сработать). Его надо распаковать, например, с помощью библиотеки http://www.zlib.net/. Вообще, Вам нужен анализ принятых заголовков:
|
| Автор: rudolfninja 7.12.2015, 10:51 |
Вам нужен весь код или только того участка, где приосходит прием данных? Вечером, как буду дома, скину нужную часть кода (только сообщите, какая часть кода нужна =) ) По поводу всех остальных ваших замечаний понял. Иправлюсь. Спасибо. |
| Автор: feodorv 7.12.2015, 15:45 | ||
Хотелось бы весь код, работающий с сокетом |
| Автор: rudolfninja 7.12.2015, 18:45 | ||||
Вот код отправки и получения данных. Еще заметил такую странность, что сегодня такой запрос не работает =) После
В arg 0. Повторяется не стабильно. Где-то через раз. |
| Автор: feodorv 7.12.2015, 22:10 |
Поверхностный осмотр кода привел к таким выводам:
|
| Автор: rudolfninja 7.12.2015, 22:44 | ||
| feodorv, спасибо, вроде работает. Гляньте, пожалуйста, код на наличие ошибок\недочетов.
|
| Автор: feodorv 8.12.2015, 09:12 | ||
|
| Автор: feodorv 8.12.2015, 09:29 | ||||
| Если грузится библиотека WinSock второй версии, то от проверок EINTR можно отказаться. Если таймаут не важен (но при этом сервер заставляем закрывать соединение), то всё ещё проще (можно и от select() отказаться):
Добавлено через 14 минут и 15 секунд А как Вы будете высвобождать память, выделенную под buff, если после возникнет исключение? Вообще, здесь смысла в выделении памяти мало, можно же просто
|
| Автор: rudolfninja 8.12.2015, 09:50 |
| Спасибо за замечания. Исправлю. Помечаю тему как решенную. |