System.net,单声道和.Net之间的httpPOST兼容性

时间:2012-09-29 10:19:55

标签: c# mono http-post compatibility system.web

我想写一个小程序从报纸网站下载需要登录的PDF。 我正在使用stackoverflow上找到的这个库: http://pastebin.com/RPNU39vF

我用这段代码称呼它:

   private void backupFunzionante()
    {
        String postData = "log=MYEMAIL@gmail.com&pwd=MYPASSWORD";
        myWeb.RequestManager manager = new myWeb.RequestManager();

        String uri = "http://shop.ilfattoquotidiano.it/login/?action=login";
        HttpWebResponse response;

        response = manager.SendPOSTRequest(uri, postData, null, null, true);
        String strResp = response.StatusCode.ToString();
        label1.Text += "###";

        Uri pdfUrl = new Uri("http://pdf.ilfattoquotidiano.it/openpdf/?n=20120927");
        response = manager.SendPOSTRequest("http://pdf.ilfattoquotidiano.it/openpdf/?n=20120927", "", null, null, true);
        long size = response.ContentLength;

        Stream downloadStream = response.GetResponseStream();

        using (Stream file = File.OpenWrite("C:\\f.pdf"))
        {
            CopyStream(downloadStream, file);
        }
    }

    public static void CopyStream(Stream input, Stream output)
    {
        byte[] buffer = new byte[8 * 1024];
        int len;
        while ((len = input.Read(buffer, 0, buffer.Length)) > 0)
        {
            output.Write(buffer, 0, len);
        }
    }

如果在.NET下运行,此代码可以正常工作,而如果在单声道下调用则返回空文件。

我认为问题应该在http post请求中,因为大小在 long size = response.ContentLength; 是零。

为什么两个可执行文件之间存在这种差异? 我可以做一个完全可移植的应用程序(我想在linux下使用它,因为它是我的主要操作系统)

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

Mono for Windows存在可能不存在于Mono for Linux / Macintosh中的错误,因为Mono for Windows从未成为优先考虑因素(因为该操作系统已经存在Micosoft的.NET)。

我建议您首先使用Mono for Linux进行测试。它可能工作正常。 (为此,显然你需要用本机unix路径替换“C:\”。)