Не могу разобраться с fsockopen

Line

Google, Co.
Не могу разобраться с fsockopen

Нужно получить с сайта передав скрипту на том сайте пааметр, ответ, он будет в виде
PHP:
НОМЕР,КОЛИЧЕСТВО
Как сделать это используя fsockopen. Нужно работать с time-out, для того, чтобы учитывать если сайт не отвечает - мы должны вывести предупреждение об этом.

Запрос имеет вид:

www.nal.ru/nal.php?name=1000&count=1000


Помогите корректро написать скрипт
 

Paxan

Новичёк
Line
http://www.php.net/fsockopen
там пример. корректней некуда. только выбрать нужный таймаут.
 

Line

Google, Co.
Я ссылку эту тое знаю :) Но вот хрень получается.

$fp = fsockopen("www.artlebedev.ru", 80, $errno, $errstr, 2);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.artlebedev.ru\r\n";
$out .= "Connection: Close\r\n\r\n";

fwrite($fp, $out);

while (!feof($fp))
{
fgets($fp, 128);
}
fclose($fp);
}


выдает еще

HTTP/1.1 200 OK Date: Sun, 25 Sep 2005 19:24:17 GMT Server: Apache/1.3.33 (Unix) rus/PL30.20 content-length: 11675 Connection: close Content-Type: text/html; charset=WINDOWS-1251

в заголовке, а не нужно :)
 

Paxan

Новичёк
Line
Что не нужно? Заголовок? Так вырежи его. Заголовок от тела отделяется \r\n\r\n
 

whirlwind

TDD infected, paranoid
PHP:
   ...
    while ( !feof($sock) )
        $result .= fread($sock,256);

    if ( !preg_match("/(^.*?)\r\n\r\n(.*)/s",$result,$matches) ){
      // кривой ответ
    }
    $body = $matches[2];
    $headers = split("\r\n",$matches[1]);
   ...
 

Line

Google, Co.
Не получается...................... Нужно просто взять все что после \r\n\r\n

Как?
 

Line

Google, Co.
$fp = @fsockopen("www.mbstock.ru", 80, $errno, $errstr, 2);
if (!$fp)
{

echo "&#211;&#228;&#224;&#235;&#229;&#237;&#237;&#251;&#233; &#241;&#234;&#235;&#224;&#228; &#237;&#229;&#228;&#238;&#241;&#242;&#243;&#239;&#229;&#237;!";
echo "$errstr ($errno)<br />\n";
}
else
{
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.mbstock.ru\r\n";
$out .= "Connection: Close \r\n\r\n";

fwrite($fp, $out);

while (!feof($fp))
{
$x.= fgets($fp, 10000);
}


$pos = strpos($x, '\r\n\r\n ');
echo $pos;

fclose($fp);
}

Не ищет хоть тресни
 

Profic

just Profic (PHP5 BetaTeam)
Лол.
1) close лучше писать маленькими
2) ' != " -> [m]type.string[/m]
 

Paxan

Новичёк
Line
Уж0с.
PHP:
$pos  = strpos($x,"\r\n\r\n");
if ($pos !== FALSE) {
$body = substr($x,$pos,strlen($x)-$pos);
}
 

Line

Google, Co.
Спасибо всем, написал немного по другому


while (!feof($fp))
{
$string.= fgets($fp, 10000);
}

$pos = strpos($string, "\r\n\r\n");
$rest = substr($string, $pos);

fclose($fp);
return $rest;
}
 
Сверху