2013-08-09 2 views
0

매개 변수와 함께 GET 요청을 보내려고합니다. 그러나 요청을 보내는 URL에 대한 규칙 만있는 것 같습니다. POST 요청과 달리 매개 변수를 전달할 방법이 없습니다. 나는 (잘못 될 수 있음) 매개 변수를 사용하지 않고, 지금 GET 요청을 전송하는 방법Java에서 GET 요청의 매개 변수를 설정하는 방법

: GET 지원하는 HTTP의 사양에 따라

String url = "https://api.netatmo.net/oauth2/token"; 
      URL obj = new URL(url); 
      HttpsURLConnection con = (HttpsURLConnection) obj.openConnection(); 

      //add request header 
      con.setRequestMethod("POST"); 
      con.setRequestProperty("User-Agent", USER_AGENT); 
      con.setRequestProperty("Accept-Language", "en-US,en;q=0.5"); 

      String urlParameters = "grant_type=password&client_id=myid&client_secret=mysecret&username=myusername&password=mypass"; 

      // Send post request 
      con.setDoOutput(true); 
      DataOutputStream wr = new DataOutputStream(con.getOutputStream()); 
      wr.writeBytes(urlParameters); 
      wr.flush(); 
      wr.close(); 

      int responseCode = con.getResponseCode(); 
      Log.v(TAG, "\nSending 'POST' request to URL : " + url); 
      Log.v(TAG, "Post parameters : " + urlParameters); 
      Log.v(TAG, "Response Code : " + responseCode); 

      BufferedReader in = new BufferedReader(
        new InputStreamReader(con.getInputStream())); 
      String inputLine; 
      StringBuffer response = new StringBuffer(); 

      while ((inputLine = in.readLine()) != null) { 
       response.append(inputLine); 
      } 
      in.close(); 

      //print result 
      Log.v(TAG, response.toString()); 

      access_token = response.substring(17, 74); 
      refresh_token = response.substring(93,150); 
      getRequest = "/api/getuser?access_token=" + access_token + " HTTP/1.1"; 

      Log.v(TAG, access_token); 
      Log.v(TAG, refresh_token); 
      Log.v(TAG, getRequest); 

답변

0

URL이 밝혀지면 나를 혼란스럽게합니다. 나는 URL을 고쳐서 지금 작동한다.

9

: 나는 매개 변수를 사용하여 POST 요청을 보낼 방법

String url = "http://api.netatmo.net/api/getuser"; 

      URL obj = new URL(url); 
      HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 

      // optional default is GET 
      con.setRequestMethod("GET"); 

      //add request header 
      con.setRequestProperty("User-Agent", USER_AGENT); 

      int responseCode = con.getResponseCode(); 
      Log.v(TAG, ("\nSending 'GET' request to URL : " + url)); 
      Log.v(TAG, ("Response Code : " + responseCode)); 

      BufferedReader in = new BufferedReader(
        new InputStreamReader(con.getInputStream())); 
      String inputLine; 
      StringBuffer response = new StringBuffer(); 

      while ((inputLine = in.readLine()) != null) { 
       response.append(inputLine); 
      } 
      in.close(); 

      //print result 
      Log.v(TAG, (response.toString())); 

유일한 경로 매개 변수 또는 URL 매개 변수와 따라서 당신은 POST 요청에서와 같이 HTTP 요청 본문에 매개 변수를 넣을 수 없습니다.

의견에 언급 된 Sotirios와 마찬가지로 기술적으로 GET 본문에서 매개 변수를 푸시 할 수 있지만 API가 스펙을 존중하면이를 수행 할 방법을 제공하지 않습니다.

+0

, 편집 대답, 추가 편집 주시기

나는 마침내이를 사용하여 작업을 얻었다. 감사! –

+0

아니, 그냥 upvote거야. –

+0

끔찍하게 쓰여진 반면, 사용하고있는 API에는 매개 변수를 전달하는 방법이 있습니다. 그렇지 않으면 전달 매개 변수가 시도하는대로 GET 메서드를 사용하지 않을 것입니다. 해야 할 일 – OddCore

1

java.net.URL 요청에 쿼리 매개 변수를 추가하려고 시도 했습니까?

String url = "http://api.netatmo.net/api/getuser?access_token=" + access_token; 
URL obj = new URL(url); 
+0

Juned의 답변에 대한 의견보기 – OddCore

0

나는 이것을 시도, 동일한 문제가 발생 하였다

String bla = "http://api.netatmo.net/api/devicelist?access_token=" + AUTH_TOKEN; 
URL url = new URL(bla); 

BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream())); 

String line = ""; 
String message = ""; 

while ((line = reader.readLine()) != null) 
{ 
    message += line; 
} 

나는 구문이 올바르지 않은 것을 예외를 얻었다. 구문을 변경했을 때 (예 : UTF 8로 인코딩) API는 오류를 반환합니다 (404를 찾을 수 없음 ...).

try 
{ 

     System.out.println("Access Token: " + AUTH_TOKEN); 

     String url = "http://api.netatmo.net/api/devicelist"; 
     String query = "access_token=" + URLEncoder.encode(AUTH_TOKEN, CHARSET); 

     URLConnection connection = new URL(url + "?" + query).openConnection(); 
     connection.setRequestProperty("Accept-Charset", CHARSET); 

     InputStream response = connection.getInputStream(); 

     BufferedReader reader = new BufferedReader(new InputStreamReader(response)); 

     String line = ""; 
     String message = ""; 

     while ((line = reader.readLine()) != null) 
     { 
      message += line; 
     } 

     return message; 


    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

참고 : CHARSET은 = "UTF-8"@SotiriosDelimanolis 포인트 허용

관련 문제