2013-06-12 1 views
0

내가 JSON 형식으로 엔도 몬도 (Endomondo)에서 데이터를 얻을하고자하는와 GWT 애플리케이션을하고 난 다음 IRL과를 얻을 수 있습니다GWT의 HTTP 요청 빌더 반환 빈 응답

http://api.mobile.endomondo.com/mobile/api/workout/list?authToken=XXXXXXXXXX 

내가 같은 데이터를 얻을 것이다

{"data":[{"duration_sec":2710,"sport":0,"speed_kmh_avg":11.721935764889876,"device_workout_id":"6588152507813057122","feed_id":155634169,"sport2":0,"id":192960126,"altitude_m_max":227.3,"hydration":0.35771,"altitude_m_min":145.5,"has_playlist":false,"burgers_burned":1.075926,"start_time":"2013-05-21 18:57:04 UTC","calories":581,"speed_kmh_max":26.281,"distance_km":8.824012756347656,"has_points":true},]} 

하지만 어떻게 든 GWT http 요청 작성자와 함께 이것을 호출하면 할 수 없습니다. 코드에서 무엇을 변경해야합니까?

String url = "http://api.mobile.endomondo.com/mobile/api/workout/list?authToken=XXXXXXXXXX"; 
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url); 


try { 
     Request myrequest = builder.sendRequest(null, new RequestCallback() { 

     public void onError(Request request, Throwable exception) { 
      // Couldn't connect to server (could be timeout, SOP violation, etc.) 

     } 

     public void onResponseReceived(Request request, Response response) { 
      if (200 == response.getStatusCode()) { 
       trainingsJSON = JSONParser.parseStrict(response.getText()); 
       trainingsString = response.getText(); 
      Label l = new Label(); 
      l.setText("200 erros status code JSON DATA from endomondo " + response.getText()) ; 

      RootPanel.get().add(l); 
      } else { 
      // Handle the error. Can get the status text from response.getStatusText() 
       Label l = new Label(); 
       l.setText("JSON DATA from endomondo 3rror part " + response.getText()) ; 

       RootPanel.get().add(l);     
      } 
     }  
     }); 
    } catch (RequestException e) { 
     // Couldn't connect to server   
    } 

편집은

나는

builder.setHeader("Access-Control-Allow-Origin", "*");

하지만 행운과 함께 추가 노력했다.

답변

1

GWT로 CORS 요청을하면 요청에 추가 헤더를 추가하지 않아도됩니다. 서버가 사이트의 CORS 요청을 지원하는지 확인해야합니다.

http://api.mobile.endomondo.com 사이트를 관리하는 경우 클라이언트가 OPTION 요청을 보내면 적절한 CORS 헤더를 반환하도록 서버 코드를 변경해야합니다.

java 서버 측의 경우 Filter을 사용하여 page에서 CORS를 처리하는 방법에 대한 예가 있습니다.

CORS는 최신 브라우저에서만 작동합니다 (EDITED : 실제로 특정 브라우저의 이전 버전이 CORS를 지원합니다. 아래의 @Thomas 주석에있는 브라우저 목록 참조).

+0

참고 사항 : "현대적인 브라우저"는 Firefox, Chrome, Safari를 오랫동안 사용해 왔지만 Opera는 최근에 나온 것이지만 IE9- (IE10은 괜찮습니다)를 의미합니다. –

+0

예, IE9는 '내'최신 브라우저 목록에 없습니다. 고마워요 토마스 –

+0

나는 또한 "현대"여기에 수년 동안의 브라우저 (파이어 폭스 3.5, 사파리 4.0, 크롬 - 버전 4.0 이상, 안드로이드 2.1 이상)가 포함되어 있다고 지적하고 싶다. http://caniuse.com/cors –