1

有一个公共网站,我想以编程方式检索一个文档,通过浏览器执行此操作运行良好,但通过代码执行此操作返回“NO Query”。

任何人都可以检查一下,我做错了什么,老实说我坚持了几天......

这是代码:

string fileUrl = @"http://docsonline.wto.org/imrd/directdoc.asp?DDFDocuments/t/G\SPS\NALB149.doc";
            Uri uri = new Uri(fileUrl);

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);

            using (HttpWebResponse webResponse = (HttpWebResponse)request.GetResponse())
            {

                using (Stream responseStream = webResponse.GetResponseStream())
                {
                    if (responseStream != null)
                    {
                        using (MemoryStream memoryStream = new MemoryStream())
                        {
                            byte[] buffer = new byte[8192];
                            int bytesRead;
                            while ((bytesRead = responseStream.Read(buffer, 0, buffer.Length)) > 0)
                            {
                                memoryStream.Write(buffer, 0, bytesRead);
                            }
                            memoryStream.Seek(0, SeekOrigin.Begin);

                            string fileName = fileUrl.Substring(fileUrl.LastIndexOf("/") + 1, fileUrl.Length - fileUrl.LastIndexOf("/") - 1).Replace(@"\", "_");

                            using (FileStream fileStream = System.IO.File.Create(@"C:\temp\" + fileName, (int)memoryStream.Length))
                            {
                                // Fill the bytes[] array with the stream data
                                byte[] bytesInStream = new byte[memoryStream.Length];
                                memoryStream.Read(bytesInStream, 0, (int)memoryStream.Length);

                                // Use FileStream object to write to the specified file
                                fileStream.Write(bytesInStream, 0, bytesInStream.Length);
                            }
                        }
                    }
                }
            }

如您所见,有一个指向我要检索的文件的链接,有人可以尝试吗?

也许会比我有更多的运气......

等待答复

4

1 回答 1

1

好的,这里有两个问题:

  1. 您需要一个用于请求的 cookie 容器:

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
    request.CookieContainer = new CookieContainer();
    
  2. 您的路径包含由System.Uri类转义的反斜杠。结果,请求是针对 的directdoc.asp?DDFDocuments/t/G%5CSPS%5CNALB149.doc,它重定向到 404 错误。

要修复 #2,您需要将dontEscape参数传递给构造Uri函数

Uri uri = new Uri(fileUrl, true);

自 .NET 2.0 以来,此构造函数已被标记为过时,但它仍然有效。

完成这些更改后,您应该能够成功下载文档。

于 2012-12-06T21:58:38.000 回答