0

我需要获取从 aspx 站点生成的 pdf 文件。

背景故事

我想从网站获取日程安排,我已成功获取包含参数的日程安排的 url。如果您跟随 url,您将看到由网站使用给定参数创建的 PDF 流。

http://www.novasoftware.se/ImgGen/schedulegenerator.aspx?format=pdf&schoolid=57240/sv-se&type=1&id=%7bD8920398-FA90-4960-BD47-69A8EFF7204D%7d&period=&week=38&mode=0&printer=1&colors=2&head =1&clock=1&foot=1&day=0&width=2480&height=3507&count=1&decrypt=0

该 URL 是站点用来获取适当的日程安排并将其显示为 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 页面”(导航到计划 URL 时显示错误)我也不能使用这种方法。

所以我的问题是,我如何将这些数据下载为 PDF 或如何将这些数据作为流,我可以使用 StreamReader 读取?

旁注:

该页面不再使用客户端连接,因此我无法回溯它。(我使用 Fiddler2 跟踪所有连接)

使用 Fiddler,我可以看出 url SomethingSomething.com/Something.aspx 生成 PDF 并显示它。生成文档的前几行(通过 Fiddler)

%PDF-1.4

%����

%

%wPDF 由 WPCubed GmbH V3.54x[0]

%

%

1 0 对象

<>

我可以从 Fiddler 那里获得有关此站点的更多信息,因此,如果您需要,请自行尝试或让我在此处添加信息。

4

1 回答 1

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))
于 2013-09-23T00:33:35.503 回答