2016-12-08 5 views
0

HttpWebRequest 개체에 gzip 압축을 사용하여 콘텐츠 인코딩 및 수락 인코딩을 헤더에 추가해야합니다. 수락 - 인코딩 설정은 다음 줄을 추가하여 수행합니다 : request.AutomaticDecompression = DecompressionMethods.GZip; 괜찮습니다. 그러나,이 라인 request.Headers.Add(HttpRequestHeader.ContentEncoding, "gzip");으로 Content-Encoding (정확히 완료되었는지는 확실하지 않음)을 설정 한 후에 404 오류가 발생합니다. 내 요청 코드는 다음과 같습니다.요청 헤더로 Content-Encoding을 추가 한 후 404 오류가 발생했습니다.

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

오류로 인해 처리하도록 도와 주시면 감사하겠습니다.

또한 여기 내 압축 코드가 있습니다. 아마도 압축 된 것이있을 수 있습니다.

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

답변

1

귀하의 요청을 확인하시기 바랍니다. 귀하의 요청 uri가 틀린 경우에만 404가 표시됩니다. 리소스가 서버에 없거나 서버가 다운되었습니다.

당신이 다른 곳 ContentEncoding 같은 헤더에 잘못된 값 주신 경우는 원 서버가 인코딩을 지원하지 않는 의미, 당신은 다른 오류가 (지원되지 않는) 415이 아닌 404

+0

답장을 보내 주셔서 감사합니다. 그러나 요청 uri가 잘못 되었다면'request.Headers.Add (HttpRequestHeader.ContentEncoding, gzip "); ' –

0

을 codes..here 수 잘못된 헤더 필드가 "gzip"으로 설정됩니다.

ContentEncoding은 gzipping 등을 수행하기 전에 데이터의 문자 유형과 관련이 있습니다. "Ascii", "UTF7", "UTF32"등과 같은 인코딩을 나타내는 값을 가지고 있습니다. herehere을 참조하십시오.

"Gzip"은 HttpRequestHeader.ContentType을 통해 지정된 MIME 형식입니다. here을 참조하십시오.

+0

사실상 어떤 검색을 기반으로 비슷한 생각을 추론합니다. 그러나 서비스 제공 업체는 정확하게 "다음 줄을 HTTP 헤더에 추가해야합니다 : Content-Encoding : gzip"이라고 말합니다. 그런 다음 헤더로 전달할 수있는 방법이 있어야한다고 생각했습니다. –

+0

그럼 내 코드의이 줄에 gzip 문을 넣어야합니까 :'request.ContentType = "text/xml";'? –