首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >404添加Content-Encoding作为请求标头后出现错误

404添加Content-Encoding作为请求标头后出现错误
EN

Stack Overflow用户
提问于 2016-12-08 22:19:37
回答 2查看 1.2K关注 0票数 0

我必须将Content-Encoding和Accept-Encoding作为标头(使用gzip压缩)添加到HttpWebRequest对象。设置Accept-Encoding是通过添加下面这行代码来完成的:request.AutomaticDecompression = DecompressionMethods.GZip;,这样就可以了。但是,在用request.Headers.Add(HttpRequestHeader.ContentEncoding, "gzip");这一行设置Content-Encoding(我不确定它是否正确完成)之后,我得到了404error。下面是我的请求代码:

代码语言:javascript
复制
XmlDocument RequestAndResponseHelper(string requestStr, string directory)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(directory);

    var data = Encoding.ASCII.GetBytes(requestStr);
    request.Method = "POST";
    request.ContentLength = data.Length;
    request.ContentType = "text/xml";

    request.Headers.Add("userName", UserName);  
    request.Headers.Add("password", Password); 

    request.AutomaticDecompression = DecompressionMethods.GZip; //this adds  'Accept-Encoding: gzip' as request header
    request.Headers.Add(HttpRequestHeader.ContentEncoding, "gzip"); //this adds 'Content-Encoding: gzip' as request header

    using (var stream = request.GetRequestStream())
    {
        stream.Write(data, 0, data.Length);
    }

    var response = (HttpWebResponse)request.GetResponse();
    string responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

    XmlDocument rs = new XmlDocument();
    rs.LoadXml(responseString);

    return rs;
}

如果你能帮我处理这个错误,我将不胜感激。

另外,这是我的压缩代码,可能有一些关于压缩的东西。

代码语言:javascript
复制
String Compress(String requestStr)
{
    byte[] buffer = Encoding.UTF8.GetBytes(requestStr);
    MemoryStream ms = new MemoryStream();
    using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true))
    { zip.Write(buffer, 0, buffer.Length); }
    ms.Position = 0;
    MemoryStream outStream = new MemoryStream();
    byte[] compressed = new byte[ms.Length];
    ms.Read(compressed, 0, compressed.Length);
    byte[] gzBuffer = new byte[compressed.Length + 4];
    System.Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length);
    System.Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4);
    return Convert.ToBase64String(gzBuffer);
}
EN

回答 2

Stack Overflow用户

发布于 2016-12-09 00:03:01

我建议检查您的请求uri。只有当您的请求uri错误时,您才会得到404。服务器上不存在该资源或您的服务器已关闭。

如果你在报头的其他地方给了一个错误的值,比如ContentEncoding,意味着源站不支持编码,你会得到不同的错误codes..here a 415 (不支持),但不是404。

票数 1
EN

Stack Overflow用户

发布于 2016-12-09 17:25:44

错误的标题字段被设置为"gzip“。

ContentEncoding与数据中的字符类型相关,在任何done等操作完成之前。它具有表示编码的值,例如"Ascii“、"UTF7”、"UTF32“等。参见herehere

"Gzip“是通过HttpRequestHeader.ContentType指定的MIME类型。参见here

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41041666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档