2010-08-16 8 views
2

나는 안드로이드에 대한 https 클라이언트를 빌드하려고하고 서블릿의 일부 요청을 받아야합니까 하지만 getInputStream 메소드를 사용할 때 응용 프로그램이 중단됩니다.httpsURLConnection.getInputStream() 응답하지 않는다

메소드를 호출 할 때 오류가 발생하지 않습니다.

String url = "https://.../Servlet"; 

    try { 
    mPushLiteConnection = (HttpsURLConnection) new URL(url).openConnection(); 
    mPushLiteConnection.setDoOutput(true); 
    mPushLiteConnection.setDoInput(true); 
    mPushLiteConnection.setRequestMethod("POST"); 
    mPushLiteConnection.connect(); 

    subscribe(); 

    InputStream in = (InputStream)mPushLiteConnection.getInputStream(); 

    unsubscribe(); 

    mPushLiteConnection.disconnect(); 

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

이것은 전화를 확인하기위한 것이지만 작동하지 않았습니다. 이유가 무엇인지 알려주지 않는 이유는 무엇입니까?

subscribe 메서드가 작동합니다. 입력 스트림이있는 행을 주석 처리하면 서버에서 모두 올바르게 표시됩니다. 파이어 폭스에서 같은 것을 시도해 볼 수 있으며 작동하며 요청을 볼 수 있습니다.

또한 키 저장소를 TrustManager에 넣습니다.

영어로 죄송합니다. 설명해 주시면 감사하겠습니다.

THX

+0

당신은 메인 스레드 나 다른 스레드에서이 일을하고 있는가? – Falmarri

+0

클라이언트 측 인증서를 설치 했습니까? – Vinay

답변

2

나는 이유를 알고 있다고 생각한다! getInputStream() 메서드는 contentLength가 필요한 이유 (왜 그런가)? 연결할 서블릿에 contentLength가 없다면 푸시 청크 서블릿이 될 것입니다 ... 길이가없는 XML의 모든 시간 조각을 보냅니다.

그래서 .. HttpsURLConnection은 청크 분할에 유용하지 않습니다!

지금 내가 세션 객체와 동일한 연결을 시도 나는 그것이 ... 그것이 작동하지 않을 경우 희망 : 난 버스 뒤에 점프)

1

내가 다른 스레드 를 사용하고 그래, 난 클라이언트 측 인증서를 설치

나는 다른 서블릿에서 목록을로드하는 두 번째 연결을 가지고 있고 그것을 잘 작동하지만 내가 필요 없어요 SAX 파서의 InputStream. 하지만이 서블릿에 SAX 파서를 사용할 수 없습니다. XML을 가져 오지 마십시오. 시작 문서 태그가없는 XML 태그

may 문서 시작 태그를 무시하는 방법을 알고 계십니까? 나는 SAX를 위해 그것을 필요로하는지 확실하지 않다

+0

Ok ... 서버가 멈추었을 때 서버가 죽는 경우 InputStream Blocks end가 결코 끝나지 않는다고 생각합니다. 서블릿은 요청을 보내는 것으로 끝나지 않는 Push Servlet입니다. – Informatic0re

관련 문제