1

我有一个像“http://www.ti.com/lit/gpn/TPS767D318-Q1” 一个URL这是一个路径最终被路由到“http://www.ti.com/lit/ds/ (在渲染一个pdf文件)上的“symlink/tps767d318-q1.pdf”。我正在控制台应用程序中处理这个URL,以便获取您在我提供的第二个URL中看到的“pdf”文件名。从虚拟URL获取文件名?

我检查的HttpResponse对象的UriResponse.Absoluteuri财产,它说: “http://focus.ti.com/general/docs/lit/getliterature.tsp?genericPartNumber=TPS767D318-Q1 &的fileType = PDF” 看起来像这是一个嵌套的虚拟路径。任何人都可以帮助我在哪里可以到达最终的URL来提取pdf文件的名称?我没有在响应对象的任何地方找到它。我也检查了响应标题,也没有任何内容。

任何帮助将不胜感激...谢谢

回答

1

常用的技术事实证明,我的问题的URL实际上是返回的HTML内容,并做了“元标记”重定向。所以我不得不做到以下几点:

var redirect = Regex.Match(new string(buffer, 0, count), @"\<meta(?=[^>]*http-equiv\W*refresh)[^>]*?content\s*\=[^=>]*url\s*\=\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内容的meta标签,然后再打电话给我下载的程序。

1

不知道有关ASP,但在协议级的初始请求可能会导致重定向到应用/服务器上的另一端发出,这样你就可以看看最初的HTTP响应,并检查它是否是重定向代码,301,302等。如果是这样,你可以按照302s,直到你达到200,这是你可以用来检查文件名的最终URL。

1

看那Content-Disposition头,它可能看起来像:Content-Disposition: attachment; filename=tps767d318-q1.pdf。这对于获取Web服务和数据库,从“下载”文件,网络共享等

+0

是的,我检查了它...它没有文件名称。响应中缺少“Content-Disposition”标题。奇怪... ContentType显示为'html'而不是'application/PDF'。我想知道它是否会重定向到pdf文件!!任何想法发生了什么? – karry

+1

我会用Firebug或Fiddler来监视请求/响应;正如PlexQ提到的那样,您可能会触及服务器请求/响应对,因为它会通过切断“地点”来重定向您。 – CodingGorilla

+0

仅供参考...请参阅我更新的答案!谢谢您的帮助! – karry