Код ошибки ответа API API определения языка 406
Я пытаюсь использовать API определения языка Google. Сейчас я использую образец, доступный в документации Google, следующим образом:
public static String googleLangDetection(String str) throws IOException, JSONException{
String urlStr = "http://ajax.googleapis.com/ajax/services/language/detect?v=1.0&q=";
// String urlStr = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=Paris%20Hilton";
URL url = new URL(urlStr+str);
URLConnection connection = url.openConnection();
// connection.addRequestProperty("Referer","http://www.hpeprint.com");
String line;
StringBuilder builder = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
while((line = reader.readLine()) != null) {
builder.append(line);
}
JSONObject json = new JSONObject(builder.toString());
for (Iterator iterator = json.keys(); iterator.hasNext();) {
String type = (String) iterator.next();
System.out.println(type);
}
return json.getString("language");
}
Но я получаю http код ошибки "406".
Я не могу понять, в чем проблема? Как поисковый запрос Google (прокомментировал) ниже, он работает нормально.
Сам URL результирующего определения языка работает нормально, когда я запускаю его в Firefox или IE, но в моем Java-коде происходит сбой.
Есть ли что-то, что я делаю не так?
заранее спасибо
Ashish
2 ответа
Нашел ответ по следующей ссылке:
HTTP URL-адрес кодирования в Java
Пришлось изменить код следующим образом:
URI uri = new URI("http","ajax.googleapis.com","/ajax/services/language/detect","v=1.0&q="+str,null);
URL url = uri.toURL();
Как и предполагалось, все, что передается на str
содержит символы, которые недопустимы в URL, как код ошибки 406
является Not Acceptable
и выглядит возвращаемым при возникновении проблемы с кодировкой содержимого.
После быстрого Google, похоже, вам нужно запустить свой str
через класс java.net.URLEncoder, затем добавьте его в URL.