Фон :
Меня попросили создать веб-службу перевода, которая в основном должна взаимодействовать с API Переводчика Google.Поскольку текст, который мне нужно перевести, превышает 2000 символов, я не могу использовать метод GET WebRequest / GET.Вместо этого я должен использовать POST, который поддерживает до 5000 символов.
Технические примечания :
VS 2010 Utlimate, Google Translate API v2 (http://code.google.com/apis/language/translate/v2/using_rest.html#WorkingResults)
Проблема :
Я реализовал приведенный ниже код для веб-запроса POST, и он работает для URL-адресов, содержащих не более 1489 символов. Если URL-адрес содержит 1490 символов, возникает исключение.: " Удаленный сервер возвратил ошибку: (414) Request-URI слишком велик. "
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Text;
using Newtonsoft.Json.Linq;
string sourceLanguage = "es"; // English
string targetLanguage = "en"; // Spanish
string text = "Working from home ( please replace this string for a text longer thant 1,490 characters!!! )"; // Text to be translated
// url for a web request
String apiUrl = "https://www.googleapis.com/language/translate/v2?key={0}&source={1}&target={2}&q={3}";
String url = String.Format(apiUrl, Constants.apiKey, sourceLanguage, targetLanguage, text);
byte[] bytes = Encoding.ASCII.GetBytes(url);
Stream outputStream = null;
string translatedText = string.Empty;
// web request
WebRequest webRequest = WebRequest.Create(url);
// POST method
webRequest.Method = "POST";
webRequest.Headers.Add("X-HTTP-Method-Override:GET");
webRequest.ContentType = "application/x-www-form-urlencoded";
try
{
// send the POST
webRequest.ContentLength = bytes.Length;
outputStream = webRequest.GetRequestStream();
outputStream.Write(bytes, 0, bytes.Length);
}
catch (WebException e)
{
Console.WriteLine(e.Message, "HttpPost: Request error");
}
try
{
// get the response
WebResponse webResponse = webRequest.GetResponse();
if (webResponse != null)
{
// read response stream
using (StreamReader sr = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8))
{
JObject obj = JObject.Parse(sr.ReadToEnd());
JToken translated = obj.SelectToken("data.translations[0].translatedText");
// get translated text into a string
translatedText = translated.Value<string>();
}
}
}
catch (WebException e)
{
Console.WriteLine(e.Message, "HttpPost: Response error");
}
Вопрос :
Кто-нибудьЕсть опыт использования этого API перевода и посмотреть, в чем здесь ошибка? Может кто-нибудь сказать мне, что за ошибка f "$ @!, которую я потратил последние 3 часа !! Я схожу с ума от этого. Любой вклад будет ДЕЙСТВИТЕЛЬНОпризнателен. Заранее спасибо! :) 1027
Важное примечание : мне удалось преодолеть проблему POST, выполнив следующее сообщение: Переводчик Google V2 не может обрабатывать переводы больших текстов из C #