Вверх ↑
Этот топик читают: Гость
Ответов: 1058
Рейтинг: 76
#1: 2011-12-10 14:08:27 ЛС | профиль | цитата
Господа, задача в следующем.
Есть список URL типа load.php?a=
По этих адресах картинки которые нужно скачать. Если использовать HTTP_Get, то как предварительно получить имя и расширение?
Решил сначала отправлять GET запрос в помощью TCP_Client в ответе от сервера имеются необходимые данные, но столкнулся с проблемой. TCP_Client не имеет свойства аналогичного Wait в HTTP_Get(True - ожидать окончания закачки, False - создать отдельный поток и вернуть управление основной программе)
Также при переборе строк, в след за первой строкой(URL) идет следующая, также прога не ждет пока TCP_Client получит ответ от сервера.

Конечно решить можно, но не охота переделывать схему. Может у кого есть какие то идеи?

Для наглядности кусочек схемки.
code_26117.txt

Некоторым может показаться что проблемы нету. Так вот принцип следующий.
Прога сканирует вики, качает страницы, далее парсит скачанную страницу и все URL-ы заменяет на локальные(сохраненные на компе). Можно все урлы скачать по завершению работы, но мне нужно сразу же заменять ссылки типа "load.php?a=" на локальные.
Также прога CHMCreator для автоматизированного обновления оффлайн справки. Подробности здесь Alternative build HiAsm

карма: 0

0
файлы: 1code_26117.txt [1.4KB] [98]
Ответов: 3889
Рейтинг: 362
#2: 2011-12-10 16:41:59 ЛС | профиль | цитата
tom-it писал(а):
Решил сначала отправлять GET запрос в помощью TCP_Client

А не целесообразнее заменить GET на HEAD Просто вы перегружаете сервер двойной нагрузкой своими запросами и ненужное (на первом этапе) тело картинки получаете вдобавок, грузите канал и тратите время (вероятность супер интеллектуального кэширования ответов на одинаковые запросы у, скажем, провайдера, пока не рассматриваем). С методом HEAD сперва удобно проверить, обновилась ли картинкастатья вообще, ничего кроме заголовка не закачивая и не нагружая каналы и системы.
------------ Дoбавленo в 16.37:
tom-it писал(а):
прога не ждет пока TCP_Client получит ответ от сервера

Дело в том, что получение данных происходит не в том потоке, в котором происходил запрос
------------ Дoбавленo в 16.41:
tom-it писал(а):
TCP_Client не имеет свойства аналогичного Wait
Именно для таких случаев там предусмотрена нижняя точка Active, возвращающая 0 при удалении или разъединении сокета.
карма: 1

0
Ответов: 1058
Рейтинг: 76
#3: 2011-12-10 17:29:49 ЛС | профиль | цитата
1nd1g0 писал(а):
А не целесообразнее заменить GET на HEAD

К этому еще не дошел, ведь задача была дождаться ответа от сервера.
1nd1g0 писал(а):
Именно для таких случаев там предусмотрена нижняя точка Active

Если не затруднит примерчик приведите, чет мозги совсем не варят сегодня
карма: 0

0
Ответов: 3889
Рейтинг: 362
#4: 2011-12-10 18:05:04 ЛС | профиль | цитата
tom-it, подумалось тут, что можно устроить насильную синхронизацию ещё и по критическим секциям (заодно GET заменил на HEAD):

Add(StrList,10396009,231,105)
{
Strings=#16:load.php?a=25766|16:load.php?a=25768|
}
Add(ArrayEnum,10437329,245,161)
{
link(onItem,4753422:doSafeMode,[])
link(Array,10396009:Array,[])
}
Add(TCP_Client,2953126,322,210)
{
Port=80
IP="93.81.240.87"
link(onRead,12739176:doSafeMode,[])
link(Data,16143072:FString,[])
}
Add(FormatStr,16143072,329,161)
{
DataCount=1
Mask="HEAD /%1 HTTP/1.1
Host: hiasm.com
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://hiasm.com/wiki.html


"
Point(FString)
link(onFString,15344185:doEvent1,[(510,167)(510,265)(282,265)(282,216)])
}
Add(Hub,15344185,294,210)
{
link(onEvent1,2953126:doOpen,[])
link(onEvent2,2953126:doSend,[(315,223)(315,230)])
}
Add(Memo,12550335,469,210)
{
Left=130
Top=5
Width=375
Height=160
Align=5
ScrollBars=2
}
Add(BlockFind,15138573,420,210)
{
IncludeBlock=1
StartBlock="Location: "
EndBlock="
"
link(onSearch,12550335:doAdd,[])
}
Add(SafeMode,4753422,287,161)
{
Name="waitemu"
link(onSafeMode,16143072:doString,[])
}
Add(SafeMode,12739176,371,210)
{
Name="waitemu"
link(onSafeMode,15138573:doSearch,[])
}
Add(Button,9643823,189,161)
{
Left=185
Top=160
Align=2
link(onClick,10437329:doEnum,[])
}

карма: 1

0
Ответов: 1058
Рейтинг: 76
#5: 2011-12-11 14:26:56 ЛС | профиль | цитата
Не совсем то, но после тщательного просмотра страниц выяснилось что таких адресов всего два. Поэтому решил не заморачиваться и вынес их в список загрузки и замены по умолчанию.
карма: 0

0
Ответов: 3889
Рейтинг: 362
#6: 2011-12-11 14:30:57 ЛС | профиль | цитата
tom-it, Как бы там ни было, по возможности используйте HEAD при проверке обновлений файлов
карма: 1

0
Ответов: 1058
Рейтинг: 76
#7: 2011-12-11 14:37:08 ЛС | профиль | цитата
1nd1g0 писал(а):
HEAD при проверке обновлений файлов

В данном случае между запросами нет разницы, поскольку ответы в обоих случаях идентичны, как по размеру, так и по содержанию.
А для проверки обновленных страниц HEAD не подходит, в ответе нет данных о последнем редактировании. Для этих целей использую GET на следующий адрес http://hiasm.com/index_serv.php?q=24&p=...
В любом случае при первом запуске будет более 2000 запросов, поэтому чтобы хоть как то уменьшить нагрузку на сервер ввел регулируемую(указывается в командной строке во время запуска) задержку между запросами.
карма: 0

0
7
Сообщение
...
Прикрепленные файлы
(файлы не залиты)