Я получаю исключение java.io.FileNotFoundException для HTTPS URL - PullRequest
2 голосов
/ 13 марта 2019

Мой код такой:

        URL url = new URL("https://nominatim.openstreetmap.org/reverse?format=json&lat=44.400000&lon=26.088492&zoom=18&addressdetails=1");
        HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
        connection.setRequestMethod("POST");
        connection.setRequestProperty("User-Agent", "Mozilla/5.0");
        connection.setRequestProperty("Accept-Language","en-US");
        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        StringBuilder json = new StringBuilder(1024);
        String tmp;
        while ((tmp = reader.readLine()) != null) json.append(tmp).append("\n");
        reader.close();
        JSONObject data = new JSONObject(json.toString());

Однако я получаю исключение java.io.FileNotFoundException в BufferedReader. Адрес правильный, и любой браузер отображает результат json. Мне нужно получить понятный человеку адрес от lat и lon, также известный как обратное геокодирование. Я перепробовал много вещей, но ничего не получалось, поэтому я буду очень благодарен, если вы скажете мне, что я делаю неправильно. Если это возможно, я предпочитаю не использовать какую-либо внешнюю библиотеку.

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

На самом деле проблема, кажется, на данный момент устранена, так как единственное, что исправлено, это addRequestProperty вместо setRequestProperty и данных агента пользователя, но я не думаю, что это так важно. Я не очень знаком с add и set requestproperty и не знаю точно, в чем разница, но это кажется важным в этом случае.

        URL url = new URL("https://nominatim.openstreetmap.org/reverse?format=json&lat=44.400000&lon=26.088492&zoom=18&addressdetails=1");
        HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
        connection.setRequestMethod("GET"); //POST or GET no matter
        connection.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0");
        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        StringBuilder json = new StringBuilder(1024);
        String tmp;
        while ((tmp = reader.readLine()) != null) json.append(tmp).append("\n");
        reader.close();
        JSONObject data = new JSONObject(json.toString());

Спасибо всем за ответы, проблема решена!

0 голосов
/ 13 марта 2019

Я написал этот блок кода и нашел решение.Вы можете посмотреть параметры метода setRequestProperty

    String response = null;
    try {
        URL url = new URL("https://nominatim.openstreetmap.org/reverse?format=json&lat=44.400000&lon=26.088492&zoom=18&addressdetails=1");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
        connection.connect();
        connection.getResponseCode(); //if you want to check response code
        InputStream stream = connection.getErrorStream();
        if (stream == null) {
            stream = connection.getInputStream();
            BufferedReader r  = new BufferedReader(new InputStreamReader(connection.getInputStream(), Charset.forName("UTF-8")));

            StringBuilder sb = new StringBuilder();
            String line;
            while ((line = r.readLine()) != null) {
                sb.append(line);
            }
            System.out.println(sb.toString());
    }
        } catch (Exception e) {
        e.printStackTrace();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...