Код ошибки ответа API API определения языка 406 - PullRequest
1 голос
/ 27 сентября 2010

Я пытаюсь использовать 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.

Что-то я не так делаю?

Заранее спасибо

Ашиш

Ответы [ 2 ]

1 голос
/ 27 сентября 2010

Предполагается, что все, что передается в str, содержит недопустимые символы в URL-адресе, так как код ошибки 406 равен Not Acceptable и выглядит возвращаемым при возникновении проблемы с кодировкой содержимого.

После быстрого поиска в Google похоже, что вам нужно запустить str через класс java.net.URLEncoder , а затем добавить его в URL.

0 голосов
/ 28 сентября 2010

Нашел ответ по следующей ссылке:

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();  
...