2014-10-13 3 views
3

HttpURLConnection을 사용하여 서버에서 데이터를 가져 오려고합니다. 요청은 GET 요청입니다. 그러나 항상 상태 코드 405(BAD_METHOD)을 반환합니다. 같은 사용 HttpClient을 수행하는 경우, 내가 원하는 출력을 얻을 수 있지만HttpUrlConnection Get 메서드가 상태 코드 405를 반환합니다.

URL url2 = new URL("http://www.example.com/api/client_list?"); 
HttpURLConnection connection = (HttpURLConnection) url2 
       .openConnection(); 
connection.setRequestMethod("GET"); 
connection.setReadTimeout(NET_READ_TIMEOUT_MILLIS); 
connection.setConnectTimeout(CONNECTION_TIMEOUT_MILLIS); 
connection.setRequestProperty("Authorization", token); 
connection.setDoInput(true); 
connection.setDoOutput(true); 

List<NameValuePair> params = new ArrayList<NameValuePair>(); 
params.add(new BasicNameValuePair("client_id", clientRole)); 

OutputStream os = connection.getOutputStream(); 
BufferedWriter writer = new BufferedWriter(
       new OutputStreamWriter(os, "UTF-8")); 
writer.write(getQuery(params)); 
writer.flush(); 
writer.close(); 
connection.connect(); 

getQuery()

private String getQuery(List<NameValuePair> params) 
      throws UnsupportedEncodingException { 
    StringBuilder result = new StringBuilder(); 
    boolean first = true; 

    for (NameValuePair pair : params) { 
     if (first) 
      first = false; 
     else 
      result.append("&"); 

      result.append(URLEncoder.encode(pair.getName(), "UTF-8")); 
      result.append("="); 
      result.append(URLEncoder.encode(pair.getValue(), "UTF-8")); 
    } 

    return result.toString(); 
} 

: 아래는 내가 쓴 방법이다. 다음은 HttpClient

String url = "http://www.example.com/api/client_list?client_id=" + rolename; 
HttpClient httpClient = new DefaultHttpClient(); 
HttpGet httpGet = new HttpGet(url); 
httpGet.setHeader("Authorization", "Bearer " + token); 
httpClient.execute(httpGet); 

내가 HttpURLConnection의 잘못 뭐하는 거지 받고 있지 않다과 같은 작업입니다. 당신이 말한대로 서버 요청 아마 하지 방법을 GET 그래서

+0

첫 번째 코드 조각에서'getQuery()'가 속한 패키지는 무엇입니까? –

+0

'connection.setDoInput (true); 및 'connection.setDoOutput (true);'전에'connection.setRequestMethod ("GET");을 호출했는지 확인하십시오. 그렇지 않으면 HttpURLConnection에게 연결이 설정된 후 GET을 수행한다고 말합니다. –

+0

setDoInput (true) 메소드가 POST로 설정되도록하는 것은 확실합니다. – GreyBeardedGeek

답변

-1

는 상태 코드 (405)는, BAD_METHOD을 나타냅니다. 시도 connect.setRequestMethod ("POST");

+1

게시물의 마지막 부분을 읽었습니까? –

0

글쎄, 나에 따르면 GET 메서드 매개 변수는 URL의 일부로 보내야하므로 이것을 시도하십시오.

String request = "http://example.com/index.php?param1=a&param2=b&param3=c"; 
URL url = new URL(request); 
HttpURLConnection connection = (HttpURLConnection) url.openConnection();   
connection.setDoOutput(true); 
connection.setDoInput(true); 
connection.setInstanceFollowRedirects(false); 
connection.setRequestMethod("GET"); 
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
connection.setRequestProperty("charset", "utf-8"); 
connection.setUseCaches (false); 



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

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

     //print result 
     System.out.println(response.toString()); 

시도해보십시오.

10

connection.setDoInput(true);은 POST 요청을 강제 실행합니다. Make it connection.setDoInput(false);

+0

하하, 고마워. 이것은 나를 구했다. – m02ph3u5

관련 문제