2013-09-22 72 views
0

我需要获取从aspx站点生成的pdf文件。从URL获取动态创建的PDF

背景故事

我想从一个网站schedueles,我得到的URL scheduele,含参数succeded。如果您按照网址,您将显示一个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的网站使用,以获得相应的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格式下载此数据或者如何将这些数据作为可以使用StreamReader读取的数据流来获取?

图片的标题说明:

该页面使用没有进一步的客户端连接,所以我不能走回头路了。 (我使用Fiddler2来跟踪所有连接)

使用招,我可以告诉大家,网址SomethingSomething.com/Something.aspx生成PDF并显示。所生成的文档(通过的Fiddler)的第几行

%PDF-1.4

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

1 0 OBJ

<>

还有更多的信息,我可以从小提琴手得到这个网站,所以如果你需要它或者自己尝试一下或者问我这里要补充的信息。

回答

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)) 
+0

这似乎正是我需要的,但它不工作。按原样运行代码后,它将输出0字节的文件。在检查ex.Message之后,它会显示“500 server error”错误,如果我将它粘贴到浏览器中(如果需要,请测试以上内容),但不能在我使用代码抓取它时使用。 – Alex

+0

我使用上面的链接来测试代码,它工作得很好。 – ajakblackgoat

+0

事实上,我尝试了上面的'Downloader.DownloadFile(URL,fileName)'代码并设法下载并保存文件。 – ajakblackgoat