2016-11-01 6 views
0

내가 내 안드로이드 응용 프로그램에서 여행 API를 사용하여 원하는 반환Skyscanner의 여행 API/개인 apiKey에를 사용/429

먼저 테스트 장치 데모 API 키 (200)를 반환 (prtl6749387986743898559646983194), 성공 세션 및 폴링에게 세션

만들기

그러나 Dashboard 비공개 API 키를 사용하는 중 429 Too many request

비공개 API 키를 사용하려면 어떻게해야합니까?

내 코드 : 첫째 들어

public void run(String u) { 
    try { 
     // SystemClock.sleep(500); 
     url = new URL(u); 
     HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
     connection.setRequestMethod("POST"); 
     connection.setConnectTimeout(50 * 1000); 
     connection.setReadTimeout(50 * 1000); 
     connection.setRequestProperty("Cache-Control", "no-store"); 
     connection.setRequestProperty("Cache-Control", "no-cache"); 
     //  connection.setRequestProperty("If-None-Match", "no-store"); 
     connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
     connection.setRequestProperty("Accept", "application/xml"); 
     connection.setRequestProperty("charset", "utf-8"); 

    /* connection.setUseCaches(true); 
     connection.setDoOutput(true);*/ 


     Log.v("Response", " parameter = " + Parameters); 


     byte[] postData = Parameters.getBytes(StandardCharsets.UTF_8); 
     int postDataLength = postData.length; 
     connection.setRequestProperty("Content-Length", Integer.toString(postDataLength)); 
     OutputStream os = connection.getOutputStream(); 
     os.write(postData); 
     os.flush(); 

     // SystemClock.sleep(500); 

     int responseCode = connection.getResponseCode(); 
     Log.v("Response", "Sending 'POST' request to URL : " + url); 
     Log.v("Response", "Post parameters : " + Parameters); 
     Log.v("Response", "Response Code : " + responseCode); 
     Log.v("Response", "Message : " + connection.getResponseMessage()); 
     String result = connection.getHeaderField("Location"); 
     SettionKey = connection.getHeaderField("Location").substring(result.indexOf("v1.0/") + 5, result.length()); 
     Log.v("Response", "SessionKey = " + SettionKey); 
     connection.disconnect(); 
     // SystemClock.sleep(500); 
    } catch (IOException e) { 
     Log.v("Response", "Post Dead"); 
    } 

} 

public void get(String url) { 
    try { 
     Log.v("Response", "get"); 
     String url1 = url + "/" + SettionKey + "/?apiKey=" + apiKey; 
     URL url2 = new URL(url1); 

     HttpURLConnection connection = (HttpURLConnection) url2.openConnection(); 
     Log.v("Response", "url = " + url1); 

     connection.setRequestMethod("GET"); 
     connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded."); 
     connection.setRequestProperty("Accept", "application/xml"); 
     connection.setRequestProperty("Cache-Control", "no-cache"); 
     connection.setUseCaches(true); 
     connection.setDefaultUseCaches(true); 
     connection.setDoInput(true); 

     int responseCode = connection.getResponseCode(); 

     Log.v("Response", " " + connection.getHeaderFields()); 
     Log.v("Response", "code = " + responseCode); 
     Log.v("Response", connection.getResponseMessage()); 

     code = responseCode + connection.getResponseMessage(); 
     Flight.put("code", code); 
     InputStream is = null; 

     try { 
      is = new BufferedInputStream(connection.getInputStream()); 
      BufferedReader br = new BufferedReader(new InputStreamReader(is)); 

      setlist(br); 
      //Log.v("Response","result = "+inputLine.toString()); 
     } catch (IOException e) { 
      Log.v("Response", "read Dead.. "); 
     } 
     connection.disconnect(); 
    } catch (IOException e) { 
     Log.v("Response", "GET Dead "); 
    } 
} 

답변

2

같은 문제가 있습니다. 그 다음 알아 낸 내용은 다음과 같습니다.

Flights Live 가격 서비스가 현재 일시 중지되었습니다. 내 솔루션은 디바이스에 대한 데모 apiKey에를 사용하여, 그들의 서비스 다시 시작을 기다리고 here

에서

확인할 수 있습니다.

+0

당신의 대답에 감사드립니다! – Park

1

, 당신은 HTTP-요청을 개조 라이브러리를 사용하는 내가 추천 할 것입니다. 더 적합하고 편안하며 자신의 방식보다 빠릅니다. 그것은 당신의 방법과 대조적으로 10-15 개의 문자열을 사용할 것입니다.

@GET("reference/v1.0/locales?" + Config.API_KEY) 
Call<Locales> getLocales(@Header("Accept") String accept); 

Config.API_KEY 일부 문자열에서이 : 나는 내 응용 프로그램에서 사용할 ScyScanner API에 대한 몇 가지 기본적인 요청을

Retrofit IOGithub documentation

을 그리고 현재 위치 : 여기에서 찾을 수 있습니다 내 API 키를 보유하고있는 Config 클래스. 이 요청은 로케일 목록을 가져 오는 데 도움이 될 수 있습니다. 당신이 새로운 하나를 얻을 을 시도 키 당신의 API를 사용하여 어떤 문제가 발생한다면

@GET("reference/v1.0/countries/{locale}?" + Config.API_KEY) Call<Markets> getMarketCountries(@Header("Accept") String accept, @Path("locale") String locale); 

시장 국가

를 얻으려면. 그것은 나를 도왔습니다. 행운을 빌어 요.

+0

감사합니다. 나는 당신에게 코드를 공부하려고합니다 – Park