【问题标题】:Reading file data using HttpWebResponse使用 HttpWebResponse 读取文件数据
【发布时间】:2015-05-21 03:15:04
【问题描述】:

我正在尝试从 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。但是,如果我将来自 Web 调用的响应字节写入文件并使用 Notepad++ 打开,则编码默认为带有 BOM 的 UTF-8。

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

请求

GET https://url HTTP/1.1
Ent-APRF:文件标识符
主机:主机名
连接:保持活动

回应

HTTP/1.1 200 OK
日期:格林威治标准时间 2015 年 5 月 20 日星期三 23:51:17
内容类型:application/x-www-form-urlencoded;字符集=UTF-8
内容长度:5767
设置 Cookie:ssnid=1b7eea90ff4b11e48bb9dd1cd2992cd2;路径=/; HttpOnly
保活:超时=5,最大值=100
连接:保持活动

0�w *�H�� 
 ��h0�d1��0���0/0'1
0 UUS10U
...不包括其他内容主体...

任何帮助或建议将不胜感激。

【问题讨论】:

  • 你成功解密的代码在哪里显示?..还有不成功解密的输出显示在哪里?
  • 第二个代码块显示读取电子邮件文件并成功解密。解密函数位于单独的 C dll 中,因此我在其中包含注释“// 调用解密函数提供加密字符串”是调用该函数的位置。当对该函数的调用不成功时,将返回一个空字符串。
  • 其实我在问输出实际显示在哪里?
  • @utility - 感谢您抽出宝贵时间发表评论。我现在已经解决了这个问题。

标签: c# .net web-services encoding


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多