LINUX.ORG.RU

Как обработать несколько запросов get/post в цикле?


0

0

Необходимо в цикле обработать несколько запросов. 1. Скачать html страницу по указанному адресу в память. 2. Обработать данные 3. ...следующий запрос

Чем и как лучше воспользоваться? Если не затруднит - объясните более подробно.

anonymous

наиболее просто:

1)внимательно читаем rfc2616
2)если ничего не понятно возвращаемся к п1
3)берём перл или на хужий случай питон, ищем для них модули реализующие http клиента
4)читаем доки на модули
5)пользуя модули пишем прогу

cvv ★★★★★
()
Ответ на: комментарий от anonymous

пункты 4,5 изменяем соотв. на чтение документации QT..

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

p.p.s это я к тому, что пунком №0 должно быть - научитесь задавать вопросы. http://www.ln.ua/~openxs/articles/smart-questions-ru.html

MKuznetsov ★★★★★
()
Ответ на: комментарий от cvv

Если нечего ответить кроме как "телепаты уехали" то не стоит отвечать. Я так думаю. Если мой вопрос непонятен - то можно уточнить. Если бы я нашел ответ на форуме на свой вопрос - я бы его не задавал! Вопрос остается открытым.

anonymous
()
Ответ на: комментарий от anonymous

на твой вопрос "Чем и как лучше воспользоваться?" я ответил

ну а если ты считаеш Qt лучше чем perl в конкретном случае - флаг тебе в руки - я здесь тебе уже практически ничем не помогу.

концепция в двух словах

1)создаёщ сокет
2)конектишся к ремотному апачу (www.linux.org.ru:80)
3)посылаеш запрос(например "GET /index.jsp HTTP/1.1\r\nHost:www.linux.org.ru\r\n\r\n")
4)вычитываеш ответ
5)в зависимости от конкретной ситуации:
    а)переходиш к П5
    б)закрываеш сокет и переходиш к пункту 1

cvv ★★★★★
()
Ответ на: комментарий от cvv

Большое спасибо. Многое сразу стало понятным. Другой вопрос: а если необходимо параллельно загрузить несколько страниц? (достаточно много страниц) При этом работа все в том эе цикле идет (в цикле обрабатывается список страниц которые надо загрузить)

anonymous
()
Ответ на: комментарий от anonymous

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

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

у каждого способа свои преимущества и недостатки типа сложности, тормознутости, подводных камней

что и как из этого можно пользовать в Qt - не знаю. Но что Кт предлагает чтото четвёртое - не верю. всё остальное (aio && signal io) слишком system specific что бы дружить с С++ и Qt

cvv ★★★★★
()
Ответ на: комментарий от cvv

Уточняю. Необходимо скачать 100 страниц . Одновременно это делать - будет глупо, т.к. канал не безгранично-широкий. Ведь если начать качать все 100 будет долго и малорезультативно. Как или по каким параметрам ограничить создание новых соединений/потоков, на основе чего-грубо говоря- идет это регулирование? На возможностях канала,...?

anonymous
()
Ответ на: комментарий от anonymous

> На возможностях канала,...?

да, основной фактор.

причём надо учесть что протокол тср штука адаптивная тоесть на хорошем канале в 64 кбит разницу между 10 и 50 одновременными потоками вы сильно не заметите, на плохих каналах более стабильной будет связь при 10 потоках.

в любом случае вам придётся создавать некий пул(потоков/процессов/...) и дальше по мере выполнения заданий раздавать новые.

размер пула ЦЕЛЕСООБРАЗНО вынести в конфиг/ключ командной строки

cvv ★★★★★
()
Ответ на: комментарий от cvv

ещё протокол НТТР/1.1 позволяет через одно соединение прокачивать несколько файлов последовательно что тоже может сократить время закачки небольших файлов ибо разрыв-установление соединия процедура относительно медленная

cvv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.