使用 HttpWebResponse 读取文件数据

Reading file data using HttpWebResponse

我正在尝试从 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
        }        
    }
}

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

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。但是,如果我将网络调用的响应字节写入文件并使用 Notepad++ 打开,则编码默认为带 BOM 的 UTF-8。

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

请求

GET https://url HTTP/1.1
Ent-APRF: FileIdentifier
Host: hostName
Connection: Keep-Alive

回应

HTTP/1.1 200 OK
Date: Wed, 20 May 2015 23:51:17 GMT
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Length: 5767
Set-Cookie: ssnid=1b7eea90ff4b11e48bb9dd1cd2992cd2; path=/; HttpOnly
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive

0�w   *�H��
��h0�d1��0���0/0'1
0   UUS10U
...additional content body not included...

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

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

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
        }        
    }
}