2014-11-03 4 views
0

HttpClient를 사용하여 C#에서 특정 URL로 POST 요청 (somethis url에서 검색)을 시도하고 인코딩에 문제가 있습니다. "test"(코드 아래) 값 괜찮아요, 나에게 검색 결과를 제공하고, 다른 알파벳 ("тест")으로 된 단어는 나에게 결과를주지 않습니다.POST 요청 매개 변수 값의 인코딩

그런데 사이트 검색은 모든 단어와 잘 작동합니다. 첫 번째 경우 Firefox (요소 검사 -> 네트워크 -> POST 요청 -> 매개 변수)는 search : test와 같은 매개 변수를 표시하고 두 번째 경우에는 search : òåñò를 표시합니다. "тест"대신 "òåñò"를 보내려고했습니다. 성공하지 못했습니다. 내가 뭘 잘못하고있어? 도와주세요.

try 
{ 
    using (var httpClient = new HttpClient()) 
    { 
     var httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, url); 

     httpRequestMessage.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36"); 
     httpRequestMessage.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml"); 

     List<KeyValuePair<string, string>> parameters = new List<KeyValuePair<string, string>>(); 
     KeyValuePair<string, string> param = new KeyValuePair<string, string>("search", "test"); 

     parameters.Add(param); 

     HttpContent httpContent = new FormUrlEncodedContent(parameters); 
     httpRequestMessage.Content = httpContent; 

     var response = await httpClient.SendAsync(httpRequestMessage).ConfigureAwait(false); 

     var responseBody = await response.Content.ReadAsByteArrayAsync().ConfigureAwait(false); 

     string respBodyEncoded = encoding.GetString(responseBody); 

    } 
} 
catch 
{ 
} 

답변

0

내 생각에 다른 언어를 인코딩하는 URL이 아닙니다. 'test'와 같은 간단한 US-ASCII 문자의 경우 URL 인코딩은 필요하지 않지만 'тест'는 US-ASCII 범위 내에 있지 않으므로 URL 인코딩해야합니다.

그래서 귀하의 경우, "тест"매개 변수는 다음 URL에 대한 relvant RFC의 %D1%82%D0%B5%D1%81%D1%82

해야한다 : https://www.ietf.org/rfc/rfc1738.txt

그들은 내에서 해당하는 그래픽 문자가없는 경우 옥텟이 인코딩해야합니다

해당 문자의 사용이 안전하지 않거나 해당 문자 이 특정 URL 내에서 다른 해석을 위해 예약되어있는 경우 US-ASCII 코드화 문자 집합 sche 나를.