#asp.net #url-rewriting #httpwebrequest #url-routing #httpresponse
#asp.net #url-переписывание #httpwebrequest #url-маршрутизация #httpresponse
Вопрос:
У меня есть URL-адрес типа «http://www.ti.com/lit/gpn/TPS767D318-Q1 » к которому в конечном итоге направляется путь «http://www.ti.com/lit/ds/symlink/tps767d318-q1.pdf » в браузере (рендеринг PDF-файла). Я обрабатываю этот URL-адрес в консольном приложении, чтобы получить имя файла «pdf», которое вы видите во втором URL-адресе, который я предоставил.
Я проверил UriResponse.Свойство Absoluteuri в объекте httpresponse и в нем говорится: «http://focus.ti.com/general/docs/lit/getliterature.tsp?genericPartNumber=TPS767D318-Q1amp;fileType=pdf » похоже, это вложенный виртуальный путь. Кто-нибудь может помочь мне перейти к конечному URL-адресу, чтобы извлечь имя файла PDF? я не нашел его нигде в объекте ответа. Я также проверил заголовки ответов, и там тоже ничего нет.
Любая помощь будет оценена…Спасибо
Ответ №1:
Не уверен насчет ASP, но на уровне протокола начальный запрос может вызвать перенаправление, выдаваемое приложением / сервером на другом конце, поэтому вы можете просмотреть первоначальный HTTP-ответ и проверить, является ли это кодом перенаправления, 301, 302 и т.д. Если это так, вы можете следовать 302s, пока не нажмете 200, и это последний URL, который вы можете использовать для проверки имени файла.
Ответ №2:
Посмотрите на Content-Disposition
заголовок, он может выглядеть примерно так: Content-Disposition: attachment; filename=tps767d318-q1.pdf
. Это распространенный метод для веб-сервисов, которые извлекают и «загружают» файлы из базы данных, общих сетевых ресурсов и т. Д.
Комментарии:
1. Да, я проверил это… В нем нет имени файла. В ответе отсутствует заголовок «Content-Disposition». странно… тип содержимого отображается как «html» вместо «application / PDF». Интересно, перенаправляет ли он вообще на файл PDF !!? Есть идеи, что происходит?
2. Я бы отслеживал запрос / ответ с помощью чего-то вроде Firebug или Fiddler; как упоминал PlexQ, возможно, вы сталкиваетесь с парами запросов / ответов сервера, поскольку они перенаправляют вас через отдельные «места».
Ответ №3:
Оказывается, URL-адрес в моем вопросе фактически возвращает содержимое HTML и перенаправляет «мета-тег». Итак, мне пришлось сделать следующее:
var redirect = Regex.Match(new string(buffer, 0, count), @"<meta(?=[^>]*http-equivW*refresh)[^>]*?contents*=[^=>]*urls*=s*(?<Url>[^'"">] )", RegexOptions.IgnoreCase | RegexOptions.Singleline);
if (redirect.Success)
{
Uri uri = new Uri(new Uri(externalUrl, UriKind.Absolute), new Uri(redirect.Groups["Url"].Value, UriKind.RelativeOrAbsolute));
return SaveUrlToTemporaryFile(uri.AbsoluteUri, needsFullDownload);
}
Я получаю окончательный URL-адрес из мета-тегов из возвращаемого содержимого HTML и снова вызываю процедуру загрузки.