使用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...附加内容主体未包含…
提供服务的公司对文件生成和编码进行了调整。我现在可以使用原始代码获取并解密了。
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
}
}
}