Google Translate V2 cannot hanlde large text translations from C# Google Translate V2 cannot hanlde large text translations from C# json json

Google Translate V2 cannot hanlde large text translations from C#


Apparently using WebClient won't work as you cannot alter the headers as needed, per the documentation:

Note: You can also use POST to invoke the API if you want to send more data in a single request. The q parameter in the POST body must be less than 5K characters. To use POST, you must use the X-HTTP-Method-Override header to tell the Translate API to treat the request as a GET (use X-HTTP-Method-Override: GET).

You can use WebRequest, but you'll need to add the X-HTTP-Method-Override header:

var request = WebRequest.Create (uri);request.Method = "POST";request.ContentType = "application/x-www-form-urlencoded";request.Headers.Add("X-HTTP-Method-Override", "GET");var body = new StringBuilder();body.Append("key=SECRET");body.AppendFormat("&source={0}", HttpUtility.UrlEncode(source));body.AppendFormat("&target={0}", HttpUtility.UrlEncode(target)); //--body.AppendFormat("&q={0}", HttpUtility.UrlEncode(text));var bytes = Encoding.ASCII.GetBytes(body.ToString());if (bytes.Length > 5120) throw new ArgumentOutOfRangeException("text");request.ContentLength = bytes.Length;using (var output = request.GetRequestStream()){    output.Write(bytes, 0, bytes.Length);}


The accepted answer appears to be out of date. You can now use the WebClient (.net 4.5) successfully to POST to the google translate API making sure to set the X-HTTP-Method-Override header.

Here is some code to show you how.

using (var webClient = new WebClient()){    webClient.Headers.Add("X-HTTP-Method-Override", "GET");    var data = new NameValueCollection()     {         { "key", GoogleTranslateApiKey },         { "source", "en" },         { "target", "fr"},         { "q", "<p>Hello World</p>" }     };    try    {        var responseBytes = webClient.UploadValues(GoogleTranslateApiUrl, "POST", data);        var json = Encoding.UTF8.GetString(responseBytes);        var result = JsonConvert.DeserializeObject<dynamic>(json);        var translation = result.data.translations[0].translatedText;    }    catch (Exception ex)    {        loggingService.Error(ex.Message);    }} 


? What? it is trivial to post using C# - it is right there in the documentation.

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);{    // Set type to POST    request.Method = "POST";

From there on you bascially put the data into fom fields into the content stream.

This is not "simulate a post meethod", it is fully doing a post request as per specifications.

Btw. hwhere does json enter here? You say "in C#". There is no need to use json?