2013-06-28 82 views
0

我正在使用以下方法使用Apache HTTP客戶端調用Google Maps API。REQUEST_DENIED使用Google Maps API

protected synchronized String submitUrl(String url) throws AjApiException { 
    //split off the parameters for the post 
    String uri = extractUri(url); 
    HttpPost httpPost = new HttpPost(uri); 
    httpPost.setEntity(buildHttpEntityParmsFromUrl(url)); 
    String json = null; 
    try { 
     HttpResponse response = httpClient.execute(httpPost); 
     HttpEntity entity = response.getEntity(); 
     //should be JSON 
     Header header = entity.getContentType(); 
     log.debug("Content type:" + header.getValue()); 
     //read the body 
     json = readBody(entity.getContent()); 
     // Read any remaining portions of the entity so we don't keep the data around 
     EntityUtils.consume(entity); 
    } 
    catch (ClientProtocolException cpe) { 
     String msg = "Error using:" + url; 
     log.error(msg, cpe); 
     throw new AjApiException(msg, cpe); 
    } 
    catch (IOException ioe) { 
     String msg = "Error using:" + url; 
     log.error(msg, ioe); 
     throw new AjApiException(msg, ioe); 
    } 
    finally { 
     httpPost.releaseConnection(); 
    } 
    log.debug("Results:" + json); 

    if(json.startsWith(KeyNames.ERROR_INDICATOR)){ 
     List<String> parts = TranslationHelper.parseCsvLine(json.trim()); 
     String msg = parts.get(1); 
     int errRsn; 
     try { 
     errRsn = Integer.parseInt(parts.get(2)); 
     } 
     catch (NumberFormatException nfe) { 
     errRsn = KeyNames.ERRRSN_UNDEFINED; 
     } 
     throw new AjApiException(msg, errRsn); 
    } 
    else{ 
     return json; 
    } 
    } 


    /** 
    * From a URL, extract everything up to the parameters 
    * @param url the url 
    * @return the resource path from the URL 
    */ 
    public static final String extractUri(String url){ 
    String result = null; 
    int pos = url.indexOf("?"); 
    if(pos>=0){ 
     //strip the parms 
     result = url.substring(0, pos); 
    } 
    else{ 
     //no parms, just return 
     result = url; 
    } 

    return result; 
    } 

    /** 
    * Remove the parameters coded on the URL and create an 
    * HttpParams object with those parameters 
    * @param url the URL 
    * @return the http parameters 
    */ 
    public static UrlEncodedFormEntity buildHttpEntityParmsFromUrl(String url){ 
    List<NameValuePair> formparams = new ArrayList<NameValuePair>(); 

    int pos = url.indexOf("?"); 
    if(pos>=0){ 
     //process parms 
     String queryString = url.substring(pos + 1).trim(); 
     if(queryString.length() > 0){ 
     String[] queryParms = queryString.split("&"); 
     for(String queryParm:queryParms){ 
      String[] parts = queryParm.split("="); 
      formparams.add(new BasicNameValuePair(parts[0], parts[1])); 
     } 
     } 
    } 

    UrlEncodedFormEntity result; 
    try { 
     result = new UrlEncodedFormEntity(formparams); 
    } 
    catch (UnsupportedEncodingException uee) { 
     throw new IllegalStateException(uee); 
    } 

    return result; 
    } 

我通過的網址是:http://maps.googleapis.com/maps/api/directions/json?sensor=false&origin=PO+BX+4471,TUSTIN,CA,92782&destination=700+Civic+Center+Drive+West+-+3rd+Floor,Santa+Ana,CA-California,92702,它調用Google maps API。

當我輸入這個URL作爲瀏覽器時,我用JSON取回路由信息。當我用上面的方法調用它時,我得到:

{ 
    "routes" : [], 
    "status" : "REQUEST_DENIED" 
} 

在這一點上,我不知道該去哪裏。

回答

0

問題是由於我使用HTTP Post作爲我的軟件,而Google只接受get。我改變了打電話來解決問題。