Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Работа с сокетами: использование пробела в URL
 
 автор: Filsh   (11.09.2011 в 22:03)   письмо автору
 
 

Есть код для скачивания файлов

public static function get($url)
    {
        $nn="\r\n";
        $url_info = parse_url($url);
        $host = isset($url_info['host']) ? $url_info['host'] : '';
        $path = isset($url_info['path']) ? $url_info['path'] : '/';
        $port = isset($url_info['port']) ? $url_info['port'] : 80;

        if(isset($url_info['query']))          // вернем параметры запроса,
            $path .= '?' . $url_info['query']; // если были в исходном URI

        // попробуем соединиться с сервером
        if(!($fp = fsockopen($host, $port, $ern, $ers)))
            throw new DownloadException("Cannot connect to $host: Error #$ern ($ers)", E_USER_ERROR);

        $query="GET $url HTTP/1.0".$nn.
        'User-Agent: Mozilla/4.0 (Windows; U; Windows NT 5.0; En; rv:1.8.0.2) Gecko/20070306 Firefox/1.0.0.4'.$nn.
        "Host: $host".$nn.
        'Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1'.$nn.
        'Accept-Language: ru-RU,ru;q=0.9,en;q=0.8'.$nn.
        'Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1'.$nn.
        'Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0'.$nn.
        'Cookie2: $Version=1'.$nn.
        'Connection: Close'.$nn.$nn;

        fputs($fp,$query);
        
        // прочтем ответ
        for($reply = false; !feof($fp);)
        {
            echo '.';

            $file=fopen('test.txt', 'a');// Создаем копию файла
            $line = fgets($fp);
            
            if($reply !== false)
                $reply = $line;
            else if($line == "\r\n")
                $reply = '';

            if((fwrite($file, $line)) === false)
                throw new DownloadException("Unable write to file.", E_USER_ERROR);
        }
        fclose($fp);
    }


собственно не получается скачать файл у которого есть пробелы в урле и домен задан в виде ip адресса, вадает 400 Bad Request. И я не могу понять причина в пробелах или в доммене?

  Ответить  
 
 автор: cheops   (13.09.2011 в 09:21)   письмо автору
 
   для: Filsh   (11.09.2011 в 22:03)
 

Пробелы нужно кодировать при помощи %20 и вообще все спец-символы следует подвергать кодированию, например, при помощи функции urlencode().

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования