Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Сеть > Заголовки зугрузки файлов


Автор: Euginet 1.9.2006, 15:33
Перечитал похоие темы на форуме но не могу сообразить что я делаю не так. Я пытаюсь получить файл с сервера но получаю все время 400 или 404 хотя он там есть

<?php
$filename="/index.html";
$ser="tubs.ru";
$fp = fsockopen ($ser, 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br>\n";
} else {
    fputs($fp,"GET ".$filename." HTTP/1.0\n\n"); 
    while (!feof($fp)) {
        echo HtmlSpecialChars(fgets ($fp,128));
    }
    fclose ($fp);
}
?>

я так понял что что-то не то пишу в заголовках, но прочтение спецификации не очень помогли. Слишком много информации, не смог переработать

подскажите в чем загвоздка

Автор: MuToGeN 1.9.2006, 17:24
ВиртуалХосты?

fputs($fp,"GET ".$filename" HTTP/1.1\nHost: ".$ser."\n\n");

Добавлено @ 17:25 
А вообще лучше пользовать cURL

Автор: -=Ustas=- 1.9.2006, 17:27
Да, у тебя заголовки не правильные.
Я себе написал функцию так. Принцип таков, если адрес в данный момент не доступен, то она делает n-попыток (переменная $iteration), возвращает тебе готовый контент:
Код

<?php

function GetFile($url)
{

    static $invalid = 0;

    $purl = parse_url($url);
    $host = $purl['host'];
    $page = '';
    $headers = '';

    $iteration = 5;

    if ($socket = fsockopen($host, 80, $errno, $errstr, 30)) {
        if (isset($purl['path'])) {
            $headers .= "GET ".$purl['path']." HTTP/1.0\r\n";
        } else {
            $headers .= "GET / HTTP/1.0\r\n";
        }
        $headers .= "Accept: */*\r\n";
        $headers .= "Accept-Language: ru\r\n";
        $headers .= "Referer: Ustas\r\n";
        $headers .= "Host: ".$purl['host']."\r\n";
        $headers .= "User-Agent: Ustas Spider Robot/1.0\r\n";
        $headers .= "Connection: Close\r\n\r\n";

        fputs($socket, $headers);

        while (!feof($socket)) {
            $page .= fgets($socket);
        }
        fclose($socket);

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

        return $page;

    } else {
        $invalid++;
        if ($invalid > $iteration) {
            return FALSE;
        } else {
            SleepTime(2);
            $page = GetFile($url);
        }
    }
}

?>

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)