Официальный сайт студ.городка НГТУ
Программирование и БД » Как отделить данные(картинку) от заголовка GET-запроса? 

#1  02.01.06 21:29

Как отделить данные(картинку) от заголовка GET-запроса?

Сначала я пробовал соединение через сокет ан одном портале-все было нормально, потому что при запросе "GET /image.gif" возвращался ответ, где было поле Content-Lenght-замерял длину ответа, вычитал Content-Lenght и читал с этого места и до конца-потом записывал поток в файл и получалась картинка.

Потом перешел на друой портал-на Apache(первый был на IIS-не знаю зависит ли от этого?) и поля Content-Lenght не стало в ответе. Конечно, когда стандарт заранее известен-gif например, можно отлавливать стартовое слово GIF89.
ну а если надо просто поток "выловить"(не картинку)??

и еще: какой размер буфера оптимальнее использовать при dial-up`е?(у меня-512, но почти ничем не отличается от 1024 при выкачаивании картинок)и обязательно ли он должен быть степени двойки?

Заранее очень признателен!

Offline

#2  04.01.06 23:50

BaX
Профиль

Re: Как отделить данные(картинку) от заголовка GET-запроса?

Вообще призноком конца header'a в ответе на http-запрос  считается пустая строка. Т.е. первые 2 подряд идущих \n или \r\n, то все нижеследующее -это данные, в твоем случае картинка.

Исправлено BaX (04.01.06 23:52)

Offline

#3  05.01.06 21:18

Re: Как отделить данные(картинку) от заголовка GET-запроса?

Можно было бы конечно вылавливать последние \r\n в запросе, но не факт, что в байт-потоке картинки они не встретятся. особенно часто в gif попадается.

Исправлено tatarin (05.01.06 21:28)

Offline

#4  05.01.06 21:25

Re: Как отделить данные(картинку) от заголовка GET-запроса?

Всё понял-сейчас попробую :)

Огромное спасибо!

Исправлено tatarin (05.01.06 21:26)

Offline

#5  06.01.06 23:43

Re: Как отделить данные(картинку) от заголовка GET-запроса?

Не-нифига не помогло. Вот что получается:
[i]Expires: Thu, 01 Dec 1994 16:00:00 GMT\r\n
Cache-Control: no-cache\r\n
Pragma: no-cache\r\n
Connection: close\r\n
Transfer-Encoding: chunked\r\n
Content-Type: image/png\r\n
\r\n
e5 \r\n
\tPNG\r\n\n\0\0\0\rIHDR\0\0\02\0\0\0\0\0\0Tuq\0\0\0PLTE   WWWJJJ###dddqqq000===Y8fk\0\0\0IDATcPBpfAAA\a6F\t\f\" bxMc,hl(N&X@,\n$f1H0\b2p\b10\b0\b04&cZ\"8Cc4G\t\t\bSJQepFv\r'SXDJ ncdh, B4B jF\t\nxh`\0Gr(o\b&s\0\0\0\0IEND.B`\r\n0\r\n\r\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\[/


А файл должен начинаться с \tPNG. Так  по какому признаку выловить начало данных, кроме как тупым поиском заранее просмотренного начала файла??
Тем более, что при тестировании пару дней назад хотя бы была строчка с content-lenth(((-можно было с конца прочесть.

Offline

#6  07.01.06 14:30

BaX
Профиль

Re: Как отделить данные(картинку) от заголовка GET-запроса?

tatarin, а ты не мог бы скинуть URL на картинку на том же или подобном сервере. Хотелось бы глянуть на этот сервак. Сейчас глянул на локальном апаче - все ОК. На хостеле - все ОК.

Offline

#7  07.01.06 21:53

Re: Как отделить данные(картинку) от заголовка GET-запроса?

send.nsk.ru->label.php

Offline

#8  07.01.06 22:19

Re: Как отделить данные(картинку) от заголовка GET-запроса?

я уж думал у меня с головой плохо-еще раз проверил, на хостеле и на сенде-всё та же фигня. наверное, где-то что-то в документации пропустил:(

ЗЫ а про сенд.нск ничего плохого не подумайте-я так, для опыта, а не для массового смс-спама:)

Offline

#9  09.01.06 00:10

BaX
Профиль

Re: Как отделить данные(картинку) от заголовка GET-запроса?

Вот тебе пример исходника на php который сохраняет твою картинку в файл

<?php
$request="GET http://send.nsk.ru/label.php HTTP/1.0
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Accept: */*
Referer: http://send.nsk.ru/
Pragma: no-cache
Cache-Control: no-cache\n\n";
//--------------------------------------------------------
    $fp = fsockopen("send.nsk.ru", 80,$errno, $errstr, 10);//Открываем сокет
    stream_set_timeout($fp,30);//Устанавливаем время ожидания данных
    if (!$fp) {//Если не был открыт сокет, то...
        die("Unable to open<br>\n$errstr");//Выходим
    }

    fwrite($fp, $request);//Отправляем запрос
    $file=fopen("./label.gif","w");//Открываем файл для сохранения данных
    $mode=0;//Устанавливаем режим ожидания данных
    while($out=fread($fp,4096))
    {
        //echo $out;
        if($mode==0)// Если режим ожидания, то...
            {
               $pos=strpos($out,"\r\n\r\n");
            if($pos!==false)//Если header кончился
            {
                $mode=1;//Режим = прием
                $out=substr($out,$pos+4); //откидываем header
            }
        }
            if($mode==1)//Если режим приема данных, то...
            fwrite($file,$out);//пишем в файл
    }
    fclose($fp);
    fclose($file);
    echo '<img src="./label.gif">';
    ?>

Offline

#10  09.01.06 00:10

BaX
Профиль

Re: Как отделить данные(картинку) от заголовка GET-запроса?

Самое интересное - он работает :)

Offline

#11  01.02.06 22:01

Re: Как отделить данные(картинку) от заголовка GET-запроса?

Извини-комп был в ремонте, а на работе хостел закрыт для доступа,)
НЕ, ну на пхп я тоже могу-это достаточно гибкая штука в плане потоков приема\передачи.
Но пхп-ый код на ASP.NET хостинг не зальешь-там VBscript или C# нужны.
Не знаешь, откуда все-таки береться эта e5 \r\n?

Offline

#12  11.02.06 23:31

BaX
Профиль

Re: Как отделить данные(картинку) от заголовка GET-запроса?

Не знаю.

Offline

Программирование и БД » Как отделить данные(картинку) от заголовка GET-запроса? 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.264 сек.
Выполнено 14 запросов.