0

我正在尝试从 Java 程序中的 Web 服务获取结果。我以前做过 xml 服务,但是这个是基于文本的,我不知道如何记录响应。

这是网络服务:http ://ws.geonames.org/countryCode?lat=47.03&lng=10.2

谢谢!

4

3 回答 3

1

如果它只是文本,并且您不使用任何标准格式(如 SOAP),则需要使用 Sockets:

URL myURL = new URL("http://ws.geonames.org/countryCode?lat=47.03&lng=10.2");
URLConnection serviceConnection = myURL.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(
                               serviceConnection.getInputStream()));

List<String> response =new ArrayList<String>();

如果您有很多行,请使用它:

while ((inputLine = in.readLine()) != null) 
   response.add(inputLine);

或者,如果您只有一行(例如您问题中的 Web 服务),请使用它:

String countryCode = in.readLine();

并完成:

serviceConnection.close();

就我而言,国家代码是“AT”

于 2012-07-10T19:12:29.603 回答
0
public class CountryCodeReader {

    private String readAll(Reader rd) throws IOException {
        StringBuilder sb = new StringBuilder();
        int cp;
        while ((cp = rd.read()) != -1) {
            sb.append((char) cp);
        }
        return sb.toString();
    }

    public String readFromUrl(String url) throws IOException, JSONException {
        InputStream is = new URL(url).openStream();
        try {
            InputStreamReader is = new InputStreamReader(is, Charset.forName("UTF-8"))
            BufferedReader rd = new BufferedReader(is);

            return readAll(rd);
        } finally {
            is.close();
        }
        return null;
    }

    public static void main(String[] argv) {
        CountryCodeReader ccr = new CountryCodeReader(); 
        String cc = ccr.readFromUrl("http://ws.geonames.org/countryCode?lat=47.03&lng=10.2");
    }

}
于 2012-07-10T19:15:33.490 回答
0

除了 URL 之外的另一种实现是使用 HttpClient。

于 2012-07-10T19:18:01.323 回答