作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 API IPStack 通过 IP 获取用户的位置。此方法与原始方法重载。这个想法是,如果用户收到位置,则转到另一个功能,如果没有,则通过查找转到该功能并获取它。也许我应该使用JQuery或PHP uCurl如何https://ipstack.com/documentation文档的示例,但我不知道如何使用 Java 从 Eclipse 执行此操作(这是必须的),所以我仍然像 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;
}
}
最佳答案
您的代码似乎在服务器端执行。当调用 newUser
方法时,您需要从请求 header 中检索客户端 IP 并将其传递给 Geolocation API。
要查找的请求 header 取决于您的服务器和配置,但通常称为 Client-IP
或 X-Forwarded-For
。
一旦获得客户端 IP,您需要将其附加到 Ipstack 的查询参数之前。
仅供引用,我建议查看Ipregistry比 Ipstack 更快、更可靠的解决方案(免责声明:我运行该服务)。以下是如何通过 Ipreregistry 传递您的信息:
https://api.ipregistry.co/54.85.132.205?key=tryout
其中 54.85.132.205
和 tryout
必须分别替换为您的客户端 IP 和 API key 。
关于java - 如何从 Java 中的 RESTFul 服务请求 GET 到 Ipstack API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54539723/
我是一名优秀的程序员,十分优秀!