![]() |
[Delphi][Sockets] проблемы с получением изображения
Прошу помочь разобраться а то я че-то торможу не могу понять откуда берется г**но.
Delphi. Uses WinSock. TCP. Connect на 80 порт, GET, save to file. Код:
function wsrecvstring(mailsocket:TSocket; var L:Longint):string;иногда появляются конструкции вида Цитата:
Например Цитата:
потом в том эе файле еще раз она же, потом f56, 5321, и в разных файлах свое. В конце 0 и неско CRLF подрял. Откуда берется не ясно. Данные (картинки и тестовые до 25кб - остальные не пробовал) с сервера приходят одним цельным пакетом (когда-то сталкивался с тем что на некоторых серваках заголовок идет одним пакетом, данные остальными, потом увидел что это не обязательно и если это криво склеивать вместе... хотя у меня не криво heads:=heads+s; без мусора. ). Может кто видел это раньше? PS: предложения типа юзай wininet/indy/nm/fp не принимаются. Надо на сокетах и только. |
У меня тоже была такая хня и до сих пор есть на некоторых HTTP серверах... непонятно откуда она берется.. но я бы посоветовал почитать rfc
|
лучше читай чуть по другому.
Код:
varно примерно так ты скачаешь полностью всё что прислал сервер. А на счет тысячи - хз сам встречался что добавляют. |
В принципе да, copy(buffer,1,l);.
Но я же говорю, все приходит одним пакетом!!! Лажа находится в середине пакета, прочитанного за 1 вызов recv(). Вот в чем проблема. Неужели приййдется юзать WSARecv? я ж это ненавижу... Вот заюзал wsaRecvEx(), теперь каждый файл состоит из 2 кусков, опять тысяча в начале и все, 2-3 лажи во втрором куске и ноль в конце... Как с этим браузеры борятся, не могу понять. И никогда раньше не слышал о том что сервер может вставлять куски хлама в данные. Только заголовки! |
это протокол Http/1.1 Imho
попробуй как то заставить работать в Http/1.0, там этого нет (как - не знаю, но это определятся запросом Get) |
дык это и есть в запросе
GET /image.jpg HTTP/1.0 или GET /image.jpg HTTP/1.1 |
ну правильно, но я же не знаю как он там (или кто за него) запросы формирует :)
вчера кстати попробовал загружать картинки с нескольких серверов, никто в режиме HTTP/1.1 чанки не использовал %( vvs777 дай пример сервера с которым у тебя "проблемы" |
Нашел в чем дело, топик можно закрывать.
в логи если глянуть - Chunked. Вот его надо было обрабатывать. |
| Время: 12:08 |