2010-08-16 80 views
2

我尝试为android构建一个https客户端,我需要获得Servlet的一些请求 但是当我使用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(); 
    } 

这只是检查呼叫,但它没有工作。 任何想法为什么它挂起,并告诉我什么?

订阅方法的作品,当我注释输入流的行,服务器显示我都是正确的。 我可以尝试与Firefox一样,它的工作原理,我可以看到请求。

我还将密钥库放入TrustManager中。

对不起,我的英语我希望我解释它ennougth。

THX

+0

你的主线程或不同线程上这样做呢? – Falmarri 2010-08-16 18:33:45

+0

您是否在客户端安装了证书? – Vinay 2010-08-17 06:46:04

回答

2

我想我知道原因! getInputStream()方法需要(为什么)contentLength! 在我想连接的servlet中,没有contentLength它是一个推式分块的servlet ......它将XML的所有时间片段发送的时间不长。

所以.. HttpsURLConnection不是有用的块!

现在,我尝试的HttpClient相同的连接 我希望它的工作原理吧...如果还没有,我跳的车后;)

1

我使用的是不同的线程 是的,我安装在客户端证书

我有第二个连接到从另一个servlet加载列表,它工作正常,但我不需要一个InputStream仅用于它的SAX解析器。 但我不能使用这个servlet的SAX解析器,我没有得到一个XML,只有XML标签没有开始文档标签

maybie你知道如何忽略开始文档标签?我不知道我是否需要SAX

+0

好吧...当它挂起,我杀了服务器,它继续 我认为InputStream块结束永远不会结束这个Servlet是一个Push Servlet它永远不会以发送请求结束 – Informatic0re 2010-08-17 08:02:19