我需要获取从aspx站点生成的pdf文件。
背景故事:
我想从网站上获取schedueles,我已成功获取包含参数的scheduele的url。如果您关注该网址,您将看到一个PDF流,由该网站使用给定的参数创建。
此网址是网站用于获取相应的scheduele并将其显示为pdf的网址。 由于理论上它不是PDF文件,因此无法使用以下内容将其下载:
Dim Downloader As New WebClient
Downloader.DownloadFile(URL, fileName)
我也不能使用...
将内容下载为字符串 Dim Downloader As New WebClient
Dim Result As String = Downloader.DownloadString(URL)
...因为缺少参数会导致500服务器错误。
显示文件/流/文档或其真实名称的唯一方法是通过浏览器访问给定的URL。鉴于此,我试图通过WebBrowser控件获取PDF。但由于它“无法显示XML页面”(导航到scheduele URL时显示错误)我也不能使用这种方法。
所以我的问题是,如何以PDF格式下载此数据或如何将此数据作为Stream获取,我可以使用StreamReader阅读?
图片的标题说明:
该页面不使用其他客户端连接,因此我无法回溯它。 (我使用Fiddler2跟踪所有连接)
使用Fiddler,我可以告诉你的网址SomethingSomething.com/Something.aspx生成一个PDF并显示它。生成文档的前几行(通过Fiddler)
%PDF-1.4
%
%
WPCubed GmbH V3.54x [0]%wPDF%
%
1 0 obj
<>
我可以从Fiddler获得有关此网站的更多信息,因此如果您需要,请自行尝试或要求我在此处添加信息。
答案 0 :(得分:1)
使用以下代码将文件下载到内存流:
Dim webRes As HttpWebResponse = Nothing
Dim memStream As New MemoryStream
Try
Dim webReq As HttpWebRequest = DirectCast(WebRequest.Create(url), HttpWebRequest)
webReq.Credentials = CredentialCache.DefaultCredentials
webRes = webReq.GetResponse
Dim resStream As Stream = webRes.GetResponseStream
Dim bytesRead As Integer
Do
Dim buffer(1023) As Byte
bytesRead = resStream.Read(buffer, 0, buffer.Length)
memStream.Write(buffer, 0, bytesRead)
Loop Until bytesRead = 0
Catch ex As Exception
Finally
If webRes IsNot Nothing Then
webRes.Close()
webRes = Nothing
End If
memStream.Seek(0, SeekOrigin.Begin)
End Try
' optionally save the stream into a file
memStream.WriteTo(New FileStream("d:\filename.pdf", FileMode.Create))