안드로이드 개발 질문/답변
(글 수 45,052)
안드로이드(1.5)에서 웹API를 사용하는 어플을 작성하고 있습니다.
HttpURLConnection 클래스를 이용하고 있습니다.
Base Authorization 을 사용해서
받아오는 쪽 (GET) API 사용에는 문제가 없습니다만,
문제는 보낼 때 (POST) 입니다.
setRequestProperty 메소드를 이용해서
content-tepy 를 application/x-www-form-urlencoded
content-length 를 URLEncoder 통한 content의 바이트length 로 정해주고
content를 기록하기 위해 getOutputStream() 을 호출하는데서 문제가 생깁니다.
문제는 content를 쓰기 위해서 getOutputStream()를 호출 하는 순간에
getResponseCode() 를 호출한거 처럼 프레임이 전송되어 버립니다.
패킷 스니퍼링 툴로 뜯어보니
POST 패킷이 먼저 날아가고
Continuation or non-HTTP traffic 라는 패잇이 뒤따라 날아갑니다 ( 이 패킷에 OutputStream에 write 한 내용이 들어 있습니다.)
그런데 항상 response는 content 내용을 제공해야 한다며 거부되었다고 돌아옵니다.
테스트를 위해 getOutputStream() 까지만 호출하고 그 이후 부분을 적절히 주석 처리 해보았습니다만, getResponseCode() 를 호출 하지 않아도 예의 POST 패킷이 전송되고, 내용이 없다는 응답만이 돌아옵니다.
위의 코드에서
Base Authorization 하는 부분을 제거하면, OutputStream에 write 한 내용이 별도의 패킷으로 분리되지 않고 한 프레임으로 전송이 됩니다. (Response는 인증 되지 않았다고 옵니다.)
getOutputStream() 을 호출할때, 이전 프레임이 전송되어 버리는게 정상인지?
그리고, 두개의 프레임으로 쪼개지는 것은 왜 그런것인지?
해결책이 있는지 궁금합니다...
도와주세요 ㅠㅠ
HttpURLConnection 클래스를 이용하고 있습니다.
Base Authorization 을 사용해서
받아오는 쪽 (GET) API 사용에는 문제가 없습니다만,
문제는 보낼 때 (POST) 입니다.
setRequestProperty 메소드를 이용해서
content-tepy 를 application/x-www-form-urlencoded
content-length 를 URLEncoder 통한 content의 바이트length 로 정해주고
content를 기록하기 위해 getOutputStream() 을 호출하는데서 문제가 생깁니다.
문제는 content를 쓰기 위해서 getOutputStream()를 호출 하는 순간에
getResponseCode() 를 호출한거 처럼 프레임이 전송되어 버립니다.
패킷 스니퍼링 툴로 뜯어보니
POST 패킷이 먼저 날아가고
Continuation or non-HTTP traffic 라는 패잇이 뒤따라 날아갑니다 ( 이 패킷에 OutputStream에 write 한 내용이 들어 있습니다.)
그런데 항상 response는 content 내용을 제공해야 한다며 거부되었다고 돌아옵니다.
테스트를 위해 getOutputStream() 까지만 호출하고 그 이후 부분을 적절히 주석 처리 해보았습니다만, getResponseCode() 를 호출 하지 않아도 예의 POST 패킷이 전송되고, 내용이 없다는 응답만이 돌아옵니다.
위의 코드에서
Base Authorization 하는 부분을 제거하면, OutputStream에 write 한 내용이 별도의 패킷으로 분리되지 않고 한 프레임으로 전송이 됩니다. (Response는 인증 되지 않았다고 옵니다.)
getOutputStream() 을 호출할때, 이전 프레임이 전송되어 버리는게 정상인지?
그리고, 두개의 프레임으로 쪼개지는 것은 왜 그런것인지?
해결책이 있는지 궁금합니다...
도와주세요 ㅠㅠ
2009.08.03 11:29:55
HTTP는 TCP위에서 동작하는 프로토콜이고 그 아래 Packet이 몇개가 날라가는지는 처리에 영향을 주지 않습니다. 사실 getOutputStream()이 불렸을시에 Packet이 날라가는 것은 HTTP상에서 전혀 문제가 아닙니다. 대부분의 경우 단지 패킷이 두번 날라갔다는 이유로 서버가 에러를 낼 이유는 없습니다. 다른 부분에서 잘못된것은 아닐까요?
2009.08.03 13:24:09
프레임을 쪼개서 보내는거 자체는 문제없는게 맞습니다. (앞에 보낸 POST에 next sequence 가 남아 있고, 그 시퀀스에 맞춰서 두번째 패킷을 보내고는 있습니다.)
근데
문제는 '쪼개진' 프레임인데도 불구하고, 첫번째 프레임을 전달 받은 서버가 쪼개진 두번째 조각을 기다리지 않고 즉각 반응(Response) 해버립니다. 그래서 두번째 패킷에 담긴 content 내용을 인식하지 않는거 같습니다.
이리저리 문제점을 찾아 보면서 혹시나 싶어 질문 게시판에도 남깁니다. ㅡ
근데
문제는 '쪼개진' 프레임인데도 불구하고, 첫번째 프레임을 전달 받은 서버가 쪼개진 두번째 조각을 기다리지 않고 즉각 반응(Response) 해버립니다. 그래서 두번째 패킷에 담긴 content 내용을 인식하지 않는거 같습니다.
이리저리 문제점을 찾아 보면서 혹시나 싶어 질문 게시판에도 남깁니다. ㅡ