2017-11-14 11 views
0

개발 한 API를 사용하는 Android 앱을 개발 중입니다.HttpUrlConnection 헤더 정보가 있지만 본문이없는 게시물

HttpUrlConnection을 사용하여이 연결을 수행하고 있으며 로그인은 정상적으로 작동합니다. 문제는 로그 아웃과 함께 발생합니다. 아무것도하지 않습니다. 우편 배달부와 로그 아웃 요청을하면 잘 작동하지만 HttpUrlConnection을 사용하면 제대로 작동하지 않습니다.

로그 아웃은 다음과 같이 작동합니다 이 http://ipaddress:12345/api/LogOut

에 POST 요청을 수행하고 헤더에 로그인 한 사용자의 토큰을 포함한다. 그런 다음 서버는 데이터베이스에 가서 해당 사용자의 토큰을 삭제해야합니다 : 당신이 어떤 입력을 할 때까지

URL url = new URL(getString(R.string.url) + "LogOut"); 
HttpURLConnection con = (HttpURLConnection) url.openConnection(); 

con.setRequestProperty("Content-Type", "application/json"); 
con.setRequestProperty("Token", TokenSingleton.getToken()); 

con.setReadTimeout(10000); 
con.setConnectTimeout(15000); 
con.setRequestMethod("POST"); 
con.setDoInput(true); 
con.setDoOutput(true); 
con.setUseCaches(false); 

con.connect(); 
con.getOutputStream().flush(); 
con.getOutputStream().close(); 
con.disconnect(); 
+0

이'con.setDoInput (true);이 필요하겠습니까? 서버에서 무엇인가를 읽고 싶지만 아무 것도 읽지 않는다는 것을 연결에 알리십시오. – Vadim

+0

@ Vadim 그는 그걸 필요로하지는 않지만 기본값이기 때문입니다. 그는 어떤 종류의 입력을해야합니다. – EJP

+0

false로 설정하면 서버 측에서 제대로 작동하지 않을지 확신 할 수 없습니다. 그것은 "편도"또는 "불의 잊지"요청을합니다. 더 좋은 방법은 응답 코드를 읽는 것입니다. 서버가 이러한 요청을 수락하면 "HTTP 204 No Content"가 될 수 있습니다. 분명히, EJP는 정확합니다 - 최소한 응답 코드를 읽고, 입력 또는 오류 스트림에서 적절히 읽지 않는 경우 204. – Vadim

답변

2

아무런 변화가 없습니다 :

이 미안 요청을하려고하는 방법이다. 최소한 getResponseCode()으로 전화하여 200 여부를 확인하십시오. 200 < = 응답 코드 < = 299 인 경우 입력 스트림을 사용하는 것이 좋으며, 그렇지 않으면 오류 스트림을 사용해야합니다.

NB setDoOutput(true)은 POST에 요청 방법을 설정합니다. 당신은 스스로 할 필요가 없습니다. 기본값은 setDoInput(true)입니다. close()flush()을 의미합니다.

+0

감사합니다. 그것은 생명의 은인이었습니다. 이것은 그것을 해결하고 많은 HttpUrlConnection, 감사를 명확히했습니다. 내가 할 수있게되는대로 나는 그것을 해결되는 것으로 표시 할 것이다 :). – Smiley