Как запросить GET для Ipstack API из службы RESTFul в Java - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь определить местоположение пользователя по IP с помощью API IPStack.Этот метод перегружен оригиналом.Идея заключалась в том, что если пользователь получает местоположение, переходит к другой функции, а если нет, то с помощью поиска и получает ее.Может быть, я должен использовать JQuery или PHP uCurl, как примеры документации https://ipstack.com/documentation,, но я ничего не сделал, как это сделать из Eclipse с Java (это необходимо), поэтому я все еще пробую это как сервис RESTful, ноничего.

public Users newUser(String username, String email) {
    Client cliente = ClientBuilder.newClient();
    WebTarget servicio = cliente.target(MONGODB + MONGOCOLL + "?apiKey=" + MONGOKEY);

    try {
        JSONObject user = new JSONObject();
        JSONObject location = new JSONObject();
        user.put("username", username);
        user.put("email", email);

        ArrayList<String> following = new ArrayList<String>();
        user.put("following", following);
        ArrayList<String> friends = new ArrayList<String>();
        user.put("friends", friends);

        String ipstackfields = "&output=json&fields=country_name,city,zip";
        Client clientipstack = ClientBuilder.newClient();
        WebTarget ipstackserv = clientipstack
                .target(IPSTACK + IPSTACKEND + "?apiKey=" + IPSTACKKEY + ipstackfields);
        Response resplocated = ipstackserv.request().get();
        String slocate = resplocated.readEntity(String.class);
        JSONObject located = new JSONObject(slocate);

        location.put("country", located.get("country_name"));
        location.put("city", located.get("city"));
        location.put("postcode", located.get("zip"));
        user.put("location", location);

        Response respuesta = servicio.request().post(Entity.json(user.toString()));

        if (respuesta.getStatus() == Status.OK.getStatusCode()) {
            // TODO: leer la respuesta de la llamada y trasformar el objeto
            // JSON a un mensaje para devolverlo
            String s = respuesta.readEntity(String.class);
            JSONObject usuario = new JSONObject(s);
            return JSONtoUser(usuario);
        } else {
            return null;
        }
    } catch (Exception e) {
        return null;
    }
}

1 Ответ

0 голосов
/ 28 июня 2019

Ваш код выполняется на стороне сервера.Когда вызывается ваш метод newUser, вам нужно извлечь IP-адрес клиента из заголовка запроса и передать его в API геолокации.

Заголовок запроса для поиска зависит от вашего сервера и конфигурации, но обычно вызываетсяClient-IP или X-Forwarded-For.

Получив IP-адрес клиента, необходимо добавить его перед параметрами запроса с помощью Ipstack.

К вашему сведению, рекомендую посмотреть Ipregistry для более быстрого и надежного решения, чем Ipstack (заявление об отказе: я запускаю сервис).Вот как передать вашу информацию в Ipregistry:

https://api.ipregistry.co/54.85.132.205?key=tryout

, где 54.85.132.205 и tryout должны быть заменены соответственно вашим IP-адресом клиента и вашим ключом API.

...