Просмотр полной версии : Не могу разобраться с граббером. Помогите.
inlanger
29.06.2008, 00:37
Написал граббер, вот код:
$file=file_get_contents('http://kit.simplyonline.org/barcelona/process.php?name=inlanger&number=5&kit=1');
preg_match_all("#<img src=\"../(.*?)\" />#is",$file,$file1);
$file=$file1[1][0];
echo "<img src=http://kit.simplyonline.org/".$file.">";
Но картинку он не выводит. Если просто перейти перейти по ссылке http://kit.simplyonline.org/barcelona/process.php?name=inlanger&number=5&kit=1 и нажать на ссылку - Download Picture, то картинка скачается, а вот если взять ссылку на только что сгенерированную картинку, и попытаться открыть её в одтельном окне, то выдаст 403 ошибку...
Помогите советом :)
astrologer
29.06.2008, 01:02
Проверяется реферрер.
inlanger
29.06.2008, 01:16
И как это обойти?
И как это обойти?
Посылаешь сокеты, там указываешь реф.
inlanger
29.06.2008, 14:01
<?php
$fp = fsockopen('kit.simplyonline.org', 80);
if($fp)
{
fputs($fp, "POST http://kit.simplyonline.org/output/1214733118.png HTTP/1.0\nReferer: kit.simplyonline.org/barcelona/process.php\n\n");
echo '<pre>';
while(!feof($fp)) echo fgets($fp);
echo '</pre>';
fclose($fp);
}
?>
Не катит... Ответ - HTTP/1.1 403 Forbidden
http://sportmobile.net/futbolka/test.php
вот тут лежит мой скрипт...
$file = file_get_contents('http://kit.simplyonline.org/barcelona/process.php?name=inlanger&number=5&kit=1');
preg_match_all("#<img src=\"../(.*?)\" />#is",$file,$matches);
$host = 'kit.simplyonline.org';
$sock = fsockopen($host, 80, $errno, $errstr, 5);
if(!$sock){
echo $errstr($errno);
}else{
$header = "GET /{$matches[1][0]} HTTP/1.1\r\n";
$header .= "Host: $host\r\n";
$header .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14\r\n";
$header .= "Keep-Alive: 300\r\n";
$header .= "Connection: keep-alive\r\n";
$header .= "Referer: http://kit.simplyonline.org/barcelona/process.php?name=inlanger&number=5&kit=1\r\n\r\n";
fwrite($sock, $header);
while(!feof($sock)){ $result .= fgets($sock, 1024); }
echo $result;
}
Он получает изображение, собственно дальше делай сним что хочеш.
.:EnoT:.
29.06.2008, 15:33
там просто адрес картинки динамический, никакого рефа там не нужно...
inlanger
29.06.2008, 23:48
Как из этого картинку получить?
http://sportmobile.net/futbolka/test.php
.:EnoT:.
30.06.2008, 00:32
Как из этого картинку получить?
http://sportmobile.net/futbolka/test.php
вот
<?php
$file = file_get_contents('http://sportmobile.net/futbolka/test.php');
$img = substr($file,strpos($file,"\r\n\r\n")+4);
header('Content-type: image/png');
echo $img;
?>
.::BARS::.
30.06.2008, 00:38
сделай вывод картинки вот так...
<?
$user_agent = "User_agent: Opera/9.50 (Windows NT 5.1; U; ru)\r\n";
$accept = "Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif,image/x-bitmap, */*;q=0.1\r\n";
$accept_language = "Accept-Language: ru, en;q=0.9\r\n";
$accept_charset = "Accept-Charset: utf-8;q=0.6 windows-1251;q=0.1 *;q=0.1\r\n";
$referer = "Referer: http://kit.simplyonline.org/output/\r\n";
$conection = "Connection: Close\r\n";
$host= "kit.simplyonline.org";
$path="output/".$_SERVER['QUERY_STRING'];
$fp=fsockopen($host,80,$errno, $errstr,10);
if(!$fp) {
echo "$errstr ($errno)<br/>\n";
} else {
$data = "";$post=0;
foreach($_POST as $key=>$value){$post=1;
$data.="&$key=$value";}
if($data)$data=substr($data,1);
if($post)
$headers = "POST $path HTTP/1.0\r\n";else
$headers = "GET $path HTTP/1.0\r\n";
$headers .= "Host: $host\r\n";
$headers .= "Accept: *\r\n";
$headers .= "Accept-Charset: UTF-8\r\n";
$headers .= "Accept-Charset: *\r\n";
$headers .= "Accept-Encoding: deflate\r\n";
$headers .= "Accept-Language: ru\r\n";
$headers .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ru) Opera 9.50\r\n";
if($post){
$headers .= "Content-type: application/x-www-form-urlencoded\r\n";
$headers .= "Content-Length: ".strlen ($data)."\r\n";
$headers .= "\r\n";
$headers .= $data;}else $headers.="\r\n";
@fwrite($fp, $headers);
while($file != "\r\n") $file = @fgets($fp, 128);
$file = '';
while(!feof($fp)) $file .= @fgets($fp, 4096);
@fclose($fp); }
echo $file;
?>
inlanger
30.06.2008, 00:50
.::BARS::., пишет, что сервер не может отослать такой хедер
.:EnoT:., Изображение «http://sportmobile.net/futbolka/test2.php» не может быть показано, так как содержит ошибки.
.:EnoT:.
30.06.2008, 01:03
хм, а у меня работает.
у тебя перед заголовком (header()) скорее всего выводится какой-то текст или ещё что-то, поэтому наверно и не работает. проверь.
или используй функции кеширования ob_start() и ob_end_flush() например.
Вообщем полный ответ, с дополнением от .:EnoT:.
<?php
$file = file_get_contents('http://kit.simplyonline.org/barcelona/process.php?name=inlanger&number=5&kit=1');
preg_match_all("#<img src=\"../(.*?)\" />#is",$file,$matches);
$host = 'kit.simplyonline.org';
$sock = fsockopen($host, 80, $errno, $errstr, 5);
if(!$sock){
echo $errstr($errno);
}else{
$header = "GET /{$matches[1][0]} HTTP/1.1\r\n";
$header .= "Host: $host\r\n";
$header .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14\r\n";
$header .= "Connection: Close\r\n";
$header .= "Referer: http://kit.simplyonline.org/barcelona/process.php?name=inlanger&number=5&kit=1\r\n\r\n";
fwrite($sock, $header);
while(!feof($sock)){ $result .= fgets($sock, 1024); }
$image = substr($result, strpos($result,"\r\n\r\n")+4);
header('Content-Type: image/png');
echo $image;
}
?>
inlanger
30.06.2008, 11:00
Solker, спасибо, заработало!
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot