Получение image/jpeg посредством fsockopen()

betik

Новичок
Получение image/jpeg посредством fsockopen()

Задача - скопировать картинку с сервера. Сервер проверяет реферер и если ему он не нравится отдаёт Ошибку 403 - Запрещено.

PHP:
//Вот такой вот код
$fp=fsockopen("localhost", 80);
fputs($fp, "GET /11.jpg HTTP/1.0\r\n");
fputs($fp, "Referer: http://mysomehost.com\r\n\r\n");
if(!$fp) die ("Error. Stopped.");
header ("Content-type: image/jpeg");

while(!feof($fp))
{
echo fgets($fp, 1000);
}
И как вы понимаете - ничео не получается... То есть получается, но не то что надо. Во первых отдаётся заголовок (как от него избавиться?) И отдаётся картинка.. Но видимо картинку нужно получать в бинарном режиме.. А как???
Если пытаться записывать в файл - получается полная ахинея. Совсем не похожая на картинку.

PS В заголовке отдаётся размер контента - 12Кб, реально, вместе с заголовком - длина файла - 5Кб.

ЗЗЖ - форум там сам пределал a href к mysomehost =)
 

Фанат

oncle terrible
Команда форума
вот для чего нужны профи в пхп - порнушку качать
 

Ямерт

The Old One
HTML-тэги в URL реферера - это клиника...
И зачем ты, клиент, отдаёшь потом серверный хэдэр с типом контента?
Пока из твоего сумбурного поста так толком и не понятно, что у тебя за проблема.
В любом случае, получить картинку функцией построчного чтения данных невозможно. Описание функций для чтения бинарных данных см. в мануале.
 

Фанат

oncle terrible
Команда форума
обращаю внимание модераторов, кстати, на нереальность приведенного кода, и, как следствие - введение в заблуждение отвечающих.

-~{}~ 08.02.04 14:49:

HTML-тэги в URL реферера - это клиника...
это ббкод.
И зачем ты, клиент, отдаёшь потом серверный хэдэр с типом контента
чтобы показать стыренную картинку клиенту :)
Описание функций для чтения бинарных данных см. в мануале.
они тут не при чем.

внимательнее ;-)
 

betik

Новичок
Ну уважаемые.. Зачем же сразу обстебать и посылать в ман =(.. Ман я уже обрыл весь.. Кроме непонятно для меня работающей pack() на эту тему ничего не нашёл...
2 фанат..
1. Нет, не порнушку...
2. А чем код не реален?.. Только конкретно..
3. Есть может быть способ скопировать файл целиком (при тех же стартовых условиях)?

-~{}~ 08.02.04 11:58:

Да, проблема такова - надо скачать image/jpeg с сервера, который проверяет реферера.
 

Фанат

oncle terrible
Команда форума
1. открываемый хост не совпадает с реферером
2. хидер для вывода, а вывода - нет.

-~{}~ 08.02.04 15:04:

нажми ссылку "редактировать" под своим постом, убери [ url][ /url] из него и галку "автоматическм подсвечивать ссылки" - первая под формой
 

betik

Новичок
ну вот, теперь вывод есть... Но это ничего не меняет.. Бо я просто забыл набить echo в посте... В скрипте всё так и есть.

А на счёт реферера - считай что открываемый хост желает что бы реферером был именно mysomehost.com
 

Фанат

oncle terrible
Команда форума
считать-то я могу все, что угодно.
вот тольк ответ нужен не мне, а тебе.

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

betik

Новичок
Ладно.. Переделаем код на вот такой:
PHP:
$fp=fsockopen("localhost", 80); 
fputs($fp, "GET /11.jpg HTTP/1.0\r\n"); 
if(!$fp) die ("Error. Stopped."); 
header ("Content-type: image/jpeg"); 
while(!feof($fp)) 
{ 
echo fgets($fp, 1000); 
}
-~{}~ 08.02.04 12:42:

..Сервер вот что отвечает:

HTTP/1.1 200 OK
Date: Sun, 08 Feb 2004 12:38:39 GMT
Server: Apache/1.3.6 (Win32)
Cache-Control: max-age=5
Expires: Sun, 08 Feb 2004 12:38:44 GMT
Last-Modified: Thu, 14 Aug 2003 18:02:00 GMT
ETag: "0-5b6b-3f3bce98"
Accept-Ranges: bytes
Content-Length: 23403
Connection: close
Content-Type: image/jpeg
 

betik

Новичок
//тут я пытался написать то, в каком виде отдаётся картинка, но кодировка очень глючит...

-~{}~ 08.02.04 12:48:

Автор оригинала: Фанат
а как ты узнаешь, что отвечает сервер?
Блин... Блин.. Я что, слепой???... .. .. Или ты издеваешься?..
while(!feof($fp))
{
echo fgets($fp, 1000);
}
Енто те о чём-нть говогрит?

-~{}~ 08.02.04 12:50:

Да... Что бы получить картинку нужно пропустить строки хидеров ответа сервера, это я понимаю.. Это тоже не помогает.
 

betik

Новичок
Запусти на ослике 4+ этот скрипт и погляди... На что способны ослы.
Во вторых я не про енто. Если знаешь что ответить - ответь на поставленый вопрос - как можно реализовать копирование файла some.jpg с сервера, который требует определённого реферера (посредством ПХП ессно).


2 Алл.. Никто не подскажет?

И ещё вопрос - что такое есть Wget?
 

fixxxer

К.О.
Партнер клуба
1)
PHP:
fputs($fp, "GET /11.jpg HTTP/1.0\r\n");
while(trim(fgets($fp, 128))) ;
for ($image=''; !feof($fp); $image.=fread($fp,128)) ;
2) man wget
 

Фанат

oncle terrible
Команда форума
Запусти на ослике 4+ этот скрипт и погляди... На что способны ослы.
я щас уписаюсь :)
у него осел какие-то фокусы выделывает, а он еще удивляется, что с картинкой
 

betik

Новичок
2 Фиксер - сенкс, сча попробуем.
2 Фанат ... Уписался?.. Ответь теперь на вопрос, почему отдаётся
Content-Length: 23403
а на деле имеется вместе с сзаголовками ~10 К ?
 

betik

Новичок
2 Фанат...логично.
2Фиксер - не работает нихрена... Всё то же...
 

ys

отодвинутый новичок
betik

А зачем так все через анус?

Вот тебе еще один вариант изврата:

header ("Content-type: image/jpeg");
$im = ImageCreateFromJpeg("http://localhost/11.jpg");
imagejpeg($im);
Exit;

А еще проще, получить его себе локально и не заморачиваясь отадвать с диска
 
Сверху