如何从Java中的RESTFul服务请求GET-to-Ipstack API

如何从Java中的RESTFul服务请求GET-to-Ipstack API,java,json,rest,jersey,ip-geolocation,Java,Json,Rest,Jersey,Ip Geolocation,我正在尝试使用API IPStack通过IP获取用户的位置。此方法使用原始方法重载。这个想法是,如果用户接收到位置,则转到另一个函数,如果没有,则通过查找找到它。也许我应该使用JQuery或phpucurl来演示文档的示例,但我不知道如何从Eclipse使用Java来实现它(这是必须的),所以我仍然像尝试RESTful服务一样尝试它,但什么都没有 public Users newUser(String username, String email) { Client cliente =

我正在尝试使用API IPStack通过IP获取用户的位置。此方法使用原始方法重载。这个想法是,如果用户接收到位置,则转到另一个函数,如果没有,则通过查找找到它。也许我应该使用JQuery或phpucurl来演示文档的示例,但我不知道如何从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;
    }
}
public Users newUser(字符串用户名、字符串电子邮件){
Client cliente=ClientBuilder.newClient();
WebTarget servicicio=cliente.target(MONGODB+MONGOCOLL+“?apiKey=“+MONGOKEY”);
试一试{
JSONObject user=新的JSONObject();
JSONObject location=新的JSONObject();
user.put(“用户名”,用户名);
user.put(“email”,email);
ArrayList following=新的ArrayList();
user.put(“following”,following);
ArrayList friends=新建ArrayList();
用户。放置(“朋友”,朋友);
字符串ipstackfields=“&output=json&fields=country\u 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=新JSONObject(slocate);
地点。放置(“国家”,定位。获取(“国家名称”);
location.put(“城市”,located.get(“城市”);
location.put(“邮政编码”,located.get(“zip”);
用户。放置(“位置”,位置);
Response respuesta=servicio.request().post(Entity.json(user.toString());
if(respuesta.getStatus()==Status.OK.getStatusCode()){
//待办事项:在奥布杰托岛的拉马达和特拉斯福尔马岛
//联合国的权力下放
String s=respuesta.readEntity(String.class);
JSONObject usuario=新的JSONObject;
返回JSONtoUser(usuario);
}否则{
返回null;
}
}捕获(例外e){
返回null;
}
}

您的代码似乎是在服务器端执行的。调用方法
newUser
时,需要从请求头检索客户端IP并将其传递给地理位置API

要查找的请求头取决于您的服务器和配置,但通常称为
客户端IP
X-Forwarded-for

拥有客户机IP后,需要在使用Ipstack查询参数之前附加它

仅供参考,我建议寻找一种比Ipstack更快、更可靠的解决方案(免责声明:我运行该服务)。以下是如何通过Ipregistry传递您的信息:

其中,
54.85.132.205
试用
必须分别替换为您的客户端IP和API密钥