2013-07-09 165 views
0

我正在使用eclipse編寫一個servlet,它接收來自客戶端的POST請求,該請求應該對收到的文本進行一些拆分,訪問Google地理位置api以獲取一些數據並顯示給用戶。來自Servlet的POST請求

在本地主機上,這工作得很好。在實際的服務器上(使用Openshift和CloudBees嘗試),這不起作用。我可以看到分裂的回覆,但不是來自Google地理位置服務的回覆。總是有一個錯誤從Google服務登錄到控制檯。但是,相同的代碼在localhost上工作得很好。

後,我收到在servlet的doPost方法POST請求,我做了以下訪問谷歌地理位置服務:

//Attempting to send data to Google Geolocation Service 
      URL url; 
      HttpURLConnection connection = null; 
      try { 
       //Create connection 
       url = new URL("https://www.googleapis.com/geolocation/v1/geolocate?key=MyAPI"); 
       connection = (HttpURLConnection)url.openConnection(); 
       connection.setRequestMethod("POST"); 
       connection.setRequestProperty("Content-Type", "application/json"); 


       connection.setUseCaches (false); 
       connection.setDoInput(true); 
       connection.setDoOutput(true); 

       //Send request with data (output variable has the JSON data) 
       DataOutputStream wr = new DataOutputStream (
          connection.getOutputStream()); 
       wr.writeBytes (output); 
       wr.flush(); 
       wr.close(); 

       //Get Response  
       InputStream is = connection.getInputStream(); 
       BufferedReader rd = new BufferedReader(new InputStreamReader(is)); 
       String line; 
       StringBuffer response2 = new StringBuffer(); 
       while((line = rd.readLine()) != null) { 
       response2.append(line); 
       response2.append('\r'); 
       } 
       rd.close(); 
//Write to Screen using out=response.getWriter(); 
       out.println("Access Point's Location = " + response2.toString()); 

      } catch (Exception e) { 

       e.printStackTrace(); 


      } finally { 

       if(connection != null) { 
       connection.disconnect(); 
       } 

你能告訴我爲什麼發生這種情況,我該怎麼做這項工作?我應該使用AJAX之類的東西還是有其他解決方法?我對編碼比較陌生,因此在這個階段試圖避免學習AJAX。請允許我,如果有任何其他方式使此工作

+1

*這行不通。*有點模糊。 「我可以看到分裂的答覆,但不是來自Google地理定位服務的答覆。」這是否意味着請求被超時取消? –

+0

我相信它暫停。日誌顯示谷歌錯誤403,這意味着每日限制超越..但如果我在本地執行相同的東西,它的工作原理很好...... –

回答

0

您的本地主機有您的本地IP作爲發送IP。 Openshift等人將Openshift等人的IP作爲發送IP。所以谷歌API說:「我以前只看到過兩次localhost IP,沒關係!」,但它說:「我以前看過這個IP數百萬次的IP!沒有回覆你!」

+0

但是,對於我的API密鑰,谷歌一定沒有看到IP轉換IP時間。 你是否建議沒有解決方法? –

+0

如果服務顯示「超出了每日限制」,那麼無論API密鑰如何,顯然它都不再提供該IP。 403也意味着被禁止,這意味着Google Geolocation API將不會以任何方式提供該服務。所以是的,我擔心你可能沒有解決方案。然而,什麼*可以*幫助你:https://developers.google.com/maps/documentation/geocoding/ –

+0

好吧,即使是這樣的話,爲什麼不打印屏幕上的錯誤?在本地主機上,我試着用一個無效的密鑰做它,它在屏幕上顯示谷歌的迴應,同樣的事情不會在開放班上發生。 –