使用HttpWebResponse读取文件数据

本文关键字:数据 文件 读取 HttpWebResponse 使用 | 更新日期: 2023-09-27 17:50:03

我正在尝试从web服务读取文件。该文件被加密,解密函数期望输入(密文)为base 64编码字符串。执行以下代码,但我无法解密结果字符串。

var request = (HttpWebRequest) WebRequest.Create(new Uri(_targetUrl));
request.Method = "GET";
request.ContentType = "text/plain";
request.ContentLength = 0;
request.UseDefaultCredentials = true;
request.Headers.Add("Ent-APRF:FileIdentifier");
var cfsResponse = (HttpWebResponse) request.GetResponse();
using (var rawResponseStream = cfsResponse.GetResponseStream())
{
if (rawResponseStream != null)
    using (var content = new StreamReader(rawResponseStream, Encoding.GetEncoding(1252)))
    {
        using (var ms = new MemoryStream())
        {
            content.BaseStream.CopyTo(ms);
            var myBytes = ms.ToArray();
            var encrypteddata = Convert.ToBase64String(myBytes);
            // call decrypt function suppling encrypted string
        }        
    }
}

提供web服务的公司的技术支持人员通过电子邮件向我发送了相同的文件,我可以使用以下代码成功读取文件并解密。

using (StreamReader myFile = new StreamReader(@"C:'Encrypted_TEST", Encoding.GetEncoding(1252)))
{
    using (MemoryStream ms = new MemoryStream())
    {
        myFile.BaseStream.CopyTo(ms);
        var myBytes = ms.ToArray();
        var encrypteddata = Convert.ToBase64String(myBytes);
        // call decrypt function suppling encrypted string   
    }
}

我想知道编码是否可能是问题,因为当我在notepad++中打开电子邮件发送的文件时,编码默认为ANSI。但是,如果我将web调用的响应字节写入文件并使用notepad++打开,则编码默认为带BOM的UTF-8。

为了完整,我还包括了通过Fiddler捕获的请求和响应。

请求
GET https://url HTTP/1.1Ent-APRF: FileIdentifier主持人:主机名连接:维生之前反应

HTTP/1.1 200 OK日期:2015年5月20日星期三23:51:17 GMT内容类型:应用程序/x-www-form-urlencoded;utf - 8字符集=内容长度:5767set - cookie: ssnid = 1 b7eea90ff4b11e48bb9dd1cd2992cd2;路径=/;HttpOnlyKeep-Alive: timeout=5, max=100连接:维生0 ' w * ' H 'h0 d1 0 0 0 0 10 u  us10u...附加内容主体未包含…

使用HttpWebResponse读取文件数据

如果有任何帮助或建议,我将不胜感激。

提供服务的公司对文件生成和编码进行了调整。我现在可以使用原始代码获取并解密了。

var request = (HttpWebRequest) WebRequest.Create(new Uri(_targetUrl));
request.Method = "GET";
request.ContentType = "text/plain";
request.ContentLength = 0;
request.UseDefaultCredentials = true;
request.Headers.Add("Ent-APRF:FileIdentifier");
var cfsResponse = (HttpWebResponse) request.GetResponse();
using (var rawResponseStream = cfsResponse.GetResponseStream())
{
     if (rawResponseStream != null)
     using (var content = new StreamReader(rawResponseStream, Encoding.GetEncoding(1252)))
     {
         using (var ms = new MemoryStream())
         {
             content.BaseStream.CopyTo(ms);
             var myBytes = ms.ToArray();
             var encrypteddata = Convert.ToBase64String(myBytes);
             // call decrypt function suppling encrypted string
        }        
    }
}