Query Open MapQuest API con Java HttpURLConnection non dà alcun risultato


Ho scritto questo codice per accedere all'API MapQuest aperta da un programma Java (APPKEY lasciato fuori intenzionalmente.. ):

public class OpenMapQuestAPITest {

  private final static String APPKEY="...";

  public static void main(String[] args) throws Exception {
    String address="Germany, Hannover, Am Hohen Ufer 3A";
    URL url=new URL("http://open.mapquestapi.com/nominatim/v1/search.php?key="+
        APPKEY+"&format=json&q="+address.replace(' ','+'));
    System.out.println("Query: "+url.toString());
    HttpURLConnection con=(HttpURLConnection)url.openConnection();
    int responseCode = con.getResponseCode();
    System.out.println("Response Code : " + responseCode);
    StringBuffer response = new StringBuffer();
    try (BufferedReader in=
         new BufferedReader(new InputStreamReader(con.getInputStream()))) {
      String inputLine;
      while ((inputLine = in.readLine()) != null)
        response.append(inputLine);
    }
    System.out.println("Response: "+response.toString());
  }

}

Ottengo questo (tasto lasciato fuori intenzionalmente, aggiunta interruzione di riga):

Query: http://open.mapquestapi.com/nominatim/v1/search.php?↵
       key=...&format=json&q=Germany,+Hannover,+Am+Hohen+Ufer+3A
Response Code : 200
Response: []

Emettere esattamente la stessa query da ad esempio Chrome fornisce la risposta corretta:

[{"place_id":"1528890","licence":"Data \u00a9 OpenStreetMap contributors, ODbL 1.0. http:\/\/www.openstreetmap.org\/copyright",
  "osm_type":"node","osm_id":"322834134",
  "boundingbox":["52.3729826","52.3729826","9.7304606","9.7304606"],
  "lat":"52.3729826","lon":"9.7304606",
  "display_name":"3a, Am Hohen Ufer, Mitte, Hannover, Region Hannover, Niedersachsen, 30159, Deutschland",
  "class":"place","type":"house","importance":0.511}]

Perché MapQuest non restituisce questi dati quando chiedo tramite Java? C'è qualche personaggio in fuga di cui non sono a conoscenza? Devo impostare un agente utente speciale? Sto interrogando la connessione oggetto in modo sbagliato? Dopo tutto, il servizio restituisce OK (codice di stato HTTP 200), quindi sembra non sentirsi troppo male per la mia richiesta.

Perché non risponde?

Author: VVN, 2016-03-02

1 answers

La maggior parte delle volte questi problemi riguardano la codifica url.

1. Prova prima la codifica URL.

String address="Germany, Hannover, Am Hohen Ufer 3A";
URL url=new URL("http://open.mapquestapi.com/nominatim/v1/search.php?key="+
    APPKEY+"&format=json&q="+address.replace(' ','+'));

Prova:

URLEncoder.encode(address.replace(' ','+'), "UTF-8"));

2. Puoi andare per org.Apache.comune.httpcliente.Per maggiori informazioni Ha una classe PostMethod (org.Apache.comune.httpcliente.metodo.PostMethod), con il quale è possibile aggiungere parametri ad esso. (piuttosto HttpUrlConnection) Come

HttpClient hc = new HttpClient();
PostMethod pm =  new PostMethod(url);
// add parameters to it.
pm.addParameter("format","json");
hc.executeMethod(pm);
 1
Author: Gurpreet Singh, 2016-03-02 09:35:12