2013-11-15 5 views
1

최근 번역기 API 작업을 시작했으며 입력 텍스트가 1300자를 초과하면 오류 Too Large URL이 표시됩니다.Google Translator API "너무 큰 URL"

난 당신이 날을 제안 해주십시오 수 아래의 코드

 string apiKey = "My Key"; 
     string sourceLanguage = "en"; 
     string targetLanguage = "de"; 
     string googleUrl; 
     string textToTranslate = 
     while (textToTranslate.Length < 1300) 
     { 
      textToTranslate = textToTranslate + " hello world "; 
     } 
     googleUrl = "https://www.googleapis.com/language/translate/v2?key=" + apiKey + "&q=" + textToTranslate + "&source=" + sourceLanguage + "&target=" + targetLanguage; 

     WebRequest request = WebRequest.Create(googleUrl); 
     // Set the Method property of the request to POST^H^H^H^HGET. 
     request.Method = "GET"; // <-- ** You're putting textToTranslate into the query string so there's no need to use POST. ** 

     //// Create POST data and convert it to a byte array. 
     //string postData = textToTranslate; 
     //byte[] byteArray = Encoding.UTF8.GetBytes(postData); 

     // Set the ContentType property of the WebRequest. 
     request.ContentType = "application/x-www-form-urlencoded"; 

     // ** Commenting out the bit that writes the post data to the request stream ** 

     //// Set the ContentLength property of the WebRequest. 
     //request.ContentLength = byteArray.Length; 
     //// Get the request stream. 
     //Stream dataStream = request.GetRequestStream(); 
     //// Write the data to the request stream. 
     //dataStream.Write(byteArray, 0, byteArray.Length); 
     //// Close the Stream object. 
     //dataStream.Close(); 

     // Get the response. 
     WebResponse response = request.GetResponse(); 
     // Display the status. 
     Console.WriteLine(((HttpWebResponse)response).StatusDescription); 
     // Get the stream containing content returned by the server. 
     Stream dataStream = response.GetResponseStream(); 
     // Open the stream using a StreamReader for easy access. 
     StreamReader reader = new StreamReader(dataStream); 
     // Read the content. 
     string responseFromServer = reader.ReadToEnd(); 
     // Display the content. 
     Console.WriteLine(responseFromServer); 
     Console.WriteLine(i); 
     // Clean up the streams. 
     reader.Close(); 
     dataStream.Close(); 
     response.Close(); 

을 사용하고있는 입력 텍스트 제한 40K에게 증가 할 수 있도록 내가, 내 코드에서 할 수있는 변화의 종류가 - 요청에 따라 5 만.

답변

3

누군가가 코드를 POST 요청에서 GET으로 변경했습니다.

GET은 모든 데이터를 요청 본문에 넣는 대신 URL에 넣습니다. URL의 길이 제한이 있습니다. POST를 다시 사용하면이 문제는 해결됩니다. 이를 수행하는 방법은 HTTP 클라이언트 라이브러리의 설명서를 참조하십시오.

+0

안녕 슬림 나는 모든 것을 검색했으며 POST 요청에 대한 코드를 가져올 수 없습니다. 쓸 수 있도록 나를 도울 수 있습니까? 슬림 한 도움이 될 것입니다. –

+0

나는 그것을 얻지 않는다. 나는 "WebRequest POST"를 봤고 수십 가지의 적절한 히트 곡을 얻었다. 아마도 번역 사용으로 넘어 가기 전에 HTTP 라이브러리를 이해해야합니다. – slim