我已经看到有关此问题的线程,但我的问题特别令人困惑。我有一个免费的 200 万字符订阅、一个有效的客户 ID 和密码。当我运行我的代码时,我可以成功调用 API 几次(我见过的最多的是 75 次连续成功调用)。然后每个其他调用都返回一个错误的请求响应:远程服务器返回一个错误:(400)错误请求。
我用我的凭据创建了一次令牌,然后再也没有创建它。我遍历一个文件,解析它,并通过调用 API 提交每个解析的字符串进行翻译。似乎我达到了我现在知道的某种限制。
查看我的帐户时,它似乎并没有忽略我已经翻译的字符,这让我非常怀疑我在创建令牌时使用了错误的凭据。我检查了四次,一切似乎都很好。
任何关于我可能在这里遗漏的指导将不胜感激。
这是创建令牌的代码。我确实认为免费订阅可能存在我不知道的未知限制。
static void gettoken()
{
//Get access token
string clientID = "my client id";
string clientSecret = "my secret";
String strTranslatorAccessURI = "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13";
String strRequestDetails = string.Format("grant_type=client_credentials&client_id={0}&client_secret={1}&scope=http://api.microsofttranslator.com", clientID, clientSecret);
System.Net.WebRequest webRequest = System.Net.WebRequest.Create(strTranslatorAccessURI);
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.Method = "POST";
byte[] bytes = System.Text.Encoding.ASCII.GetBytes(strRequestDetails);
webRequest.ContentLength = bytes.Length;
using (System.IO.Stream outputStream = webRequest.GetRequestStream())
{
outputStream.Write(bytes, 0, bytes.Length);
}
System.Net.WebResponse webResponse = webRequest.GetResponse();
System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(AdmAccessToken));
AdmAccessToken token = (AdmAccessToken)serializer.ReadObject(webResponse.GetResponseStream());
MyGlobals.headerValue = "Bearer " + token.access_token;
}
这是调用 API 本身的代码。我从循环中调用 API 方法。
static void RunBing(string sterm)
{
//Submit the translation request
string txtToTranslate = sterm;
string uri = "http://api.microsofttranslator.com/v2/Http.svc/Translate?text=" + txtToTranslate + "&from=en&to=es";
System.Net.WebRequest translationWebRequest = System.Net.WebRequest.Create(uri);
translationWebRequest.Headers.Add("Authorization", MyGlobals.headerValue);
System.Net.WebResponse response = null;
try {
response = translationWebRequest.GetResponse();
}
catch (Exception e)
{
Console.WriteLine("Term failed: " + sterm);
Console.WriteLine(e);
return;
}
System.IO.Stream stream = response.GetResponseStream();
System.Text.Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
System.IO.StreamReader translatedStream = new System.IO.StreamReader(stream, encode);
System.Xml.XmlDocument xTranslation = new System.Xml.XmlDocument();
xTranslation.LoadXml(translatedStream.ReadToEnd());
MyGlobals.xlation = xTranslation.InnerText;
}
多次成功调用 API 后,我开始收到以下消息: System.Net.WebException: The remote server returned an error: (400) Bad Request。在 System.Net.HttpWebRequest.GetResponse() 在 Translate.TranslateText.Program.RunBing(String sterm)