помогите с fsockopen

W
На сайте с 08.03.2008
Offline
45
706

Вообщем парсю картинки с закрытой зоны на сайте с помощью fsockopen(). Все остальные методы тут не подходят.

$fp = fsockopen("tcp://site.ru", 80, $errno, $errstr, 90);

$request = "GET /dir/pic.asp?IDGood=101247 HTTP/1.0\r\n";

$request .= "Host: site.ru\r\n";

$request .= "Accept: image/jpeg, application/xml;q=0.9, */*;q=0.1\r\n";

$request .= "Accept-Charset: windows-1251, utf-8;q=0.6, *;q=0.1\r\n";

$request .= "Accept-Encoding: deflate, gzip, identity, *;q=0\r\n";

$request .= "Accept-Language: ru\r\n";

$request .= "Connection: close\r\n";

$request .= "Keep-Alive: 300\r\n";

$request .= "Expires: Thu, 01 Jan 1970 00:00:01 GMT\r\n";

$request .= "Cache-Control: no-store, no-cache, must-revalidate\r\n";

$request .= "Pragma: no-cache\r\n";

$request .= "Cookie: income=1\r\n";

$request .= "Referer: http://site.ru/\r\n";

$request .= "User-Agent: Mozilla/5.0 (compatible; MSIE 6.0; Windows 98)\r\n";

$request .= "Authorization: Basic {$auth}\r\n";

$request .= "\r\n";

fwrite($fp, $request);

$str = '';

stream_set_timeout($fp, 90);

while (!feof($fp))

{

$str .= fgets($fp);

}

//fwrite($fp,$str,strlen($str));

fclose($fp);

echo $str;

Вот кусок кода. Выводит иероглифы вместо картинки. Неправильно указаны HTTP заголовки как я понял. Подскажите как правильно надо. И еще вопрос.... Как эту картинку сохранить в на хосте?

BR
На сайте с 28.06.2008
Offline
75
#1

header("Content-Type: image/gif"); - при выводе поможет понять браузеру что речь идет о GIF-картинке, а не об HTML-коде

Для сохранения можно использовать запись в файл:


$f=fopen('/dir/file.gif', 'w');
fwrite($f, $str);
fclose($f);

- только сначала надо избавиться от заголовков которые пришли вместе с картинкой (один раз сохраните и сразу их увидите в файле)

размещение сайтов (http://www.brim.ru)
Segey
На сайте с 23.08.2005
Offline
404
#2

После заголовков должен быть \r\n\r\n, по нему можно вырезать

Brexit - уже совсем рядом. (https://about-this-model.blogspot.com/2019/03/brexit.html)
W
На сайте с 08.03.2008
Offline
45
#3

header("content-type: image/jpeg"); не помогает, все равно иероглифы выводятся.

я так понимаю что возможно вот этот заголовок не правильный

$request .= "Accept: image/jpeg, application/xml;q=0.9, */*;q=0.1\r\n";

Wincert добавил 24.07.2008 в 22:17

Все разобрался... От иероглифов не избавился, но при записи в файл картинка сохраняется как она есть.

Отрезаем заголовки и записываем в файл, и все отлично получается.

$str=substr($str,strpos($str,"\r\n\r\n")+4);

$f=fopen('file.jpg', 'w');

fwrite($f, $str);

fclose($f);

Спасибо всем за помощь!

LA
На сайте с 03.06.2008
Offline
105
#4
Wincert:
$str=substr($str,strpos($str,"\r\n\r\n")+4);

гы-гы


$str1 = explode("\r\n", $str);
$str = $str1['1'];
// или извращённый вариант
$str1 = explode("\r\n", $str);
unset($str1['0']);
$str = implode("\r\n", $str1);

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий