Команда C# HttpWebRequest для [закрытия] каталога, перечисляющего

Я забыл запросить файл autoload.php из папки vendors. Поскольку функция является глобальной, мне даже не нужно добавлять use FPDF;.

<?php namespace MyNamespace;

require_once '../../../vendor/autoload.php';

$pdf = new \FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();

Phpunit работал, потому что phpunit доступен из командной строки, и я настроил phpunit для включения файла autoload.php.

Надеюсь, это поможет кому-то еще. Это немного расстраивает, когда ты тратишь часы на что-то, на первый взгляд, такое простое.

13
задан 23 September 2008 в 23:08
поделиться

4 ответа

Несколько важных факторов перед кодом:

  1. Сервер HTTP должен быть настроен для разрешения списка каталогов для каталогов, которые Вы хотите;
  2. , поскольку списки каталогов являются нормальными страницами HTML, нет никакого стандарта, который определяет формат списка каталогов;
  3. из-за соображения 2 Вы находитесь на земле, куда необходимо поместить определенный код для каждого сервера.

Мой выбор состоит в том, чтобы использовать регулярные выражения. Это допускает быстрый парсинг и настройку. Можно получить определенный шаблон регулярных выражений на сайт и тот способ, которым у Вас есть очень модульный подход. Используйте внешний источник для отображения URL к образцам регулярного выражения, если Вы планируете улучшить модуль парсинга с новой поддержкой сайтов, не изменяя исходный код.

Пример для печати списка каталогов от http://www.ibiblio.org/pub/

namespace Example
{
    using System;
    using System.Net;
    using System.IO;
    using System.Text.RegularExpressions;

    public class MyExample
    {
        public static string GetDirectoryListingRegexForUrl(string url)
        {
            if (url.Equals("http://www.ibiblio.org/pub/"))
            {
                return "<a href=\".*\">(?<name>.*)</a>";
            }
            throw new NotSupportedException();
        }
        public static void Main(String[] args)
        {
            string url = "http://www.ibiblio.org/pub/";
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            {
                using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                {
                    string html = reader.ReadToEnd();
                    Regex regex = new Regex(GetDirectoryListingRegexForUrl(url));
                    MatchCollection matches = regex.Matches(html);
                    if (matches.Count > 0)
                    {
                        foreach (Match match in matches)
                        {
                            if (match.Success)
                            {
                                Console.WriteLine(match.Groups["name"]);
                            }
                        }
                    }
                }
            }

            Console.ReadLine();
        }
    }
}
31
ответ дан 1 December 2019 в 17:48
поделиться

Можно альтернативно настроить сервер для WebDAV.

0
ответ дан 1 December 2019 в 17:48
поделиться

Вы не можете, если конкретному каталогу, который Вы хотите, не включили каталог, перечисляющий и никакой файл по умолчанию (обычно index.htm, index.html или default.html, но всегда настраивающийся). Только затем будете Вы быть подаренными список каталогов, который будет обычно повышаться с HTML и требовать парсинга.

0
ответ дан 1 December 2019 в 17:48
поделиться

Основное понимание:

списки Каталогов являются просто страницами HTML, сгенерированными веб-сервером. Каждый веб-сервер генерирует эти страницы HTML своим собственным способом, потому что нет никакого стандартного пути к веб-серверу для списка этих каталогов.

лучший способ получить список каталогов, должен просто сделать Запрос HTTP к URL, за который Вы хотели бы список каталогов и пытаться проанализировать и извлечь все ссылки от HTML, возвращенного Вам.

Для парсинга ссылок HTML попытайтесь использовать Пакет Гибкости HTML .

Просмотр Каталога:

веб-сервер требуется перечислить каталоги от, должны были включить каталог, просматривающий для получения этого представления HTML файлов в его каталогах. Таким образом, можно только получить список каталогов, если сервер HTTP хочет, чтобы Вы смогли к.

А быстрый пример Пакета Гибкости HTML:

HtmlDocument doc = new HtmlDocument();
doc.Load(strURL);
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a@href")
{
HtmlAttribute att = link"href";
//do something with att.Value;
}

Более чистая альтернатива:

, Если это возможно в Вашей ситуации, более чистый метод должен использовать намеченный протокол для списков каталогов, как Протокол передачи файлов (FTP), SFTP (FTP как по SSH) или FTPS (FTP по SSL).

, Что, если просмотр каталога не включен:

, Если веб-серверу не включили каталог, просматривающий, то нет никакого простого способа получить список каталогов.

лучшее, которое Вы могли сделать в этом случае, должно запуститься в данном URL, перейти по всем ссылкам HTML на той же странице и попытаться создать виртуальный список каталогов сами на основе относительных путей ресурсов на этих страницах HTML. Это не даст Вам полный список того, какие файлы находятся на самом деле на веб-сервере все же.

9
ответ дан 1 December 2019 в 17:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: