Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android &引用;“已建立连接”;HttpsURLConnection中的异常_Android_Httpsurlconnection - Fatal编程技术网

Android &引用;“已建立连接”;HttpsURLConnection中的异常

Android &引用;“已建立连接”;HttpsURLConnection中的异常,android,httpsurlconnection,Android,Httpsurlconnection,我正在尝试使用HttpsURLConnection执行POST请求,并获取 java.net.ProtocolException: Connection already established 奇怪的是,在setRequestMethod上,conn.connected返回前面的false 我错过了什么 URL url = new URL("https://ws.audioscrobbler.com/2.0/"); HttpsURLConnection conn = (HttpsURLConn

我正在尝试使用
HttpsURLConnection
执行POST请求,并获取

java.net.ProtocolException: Connection already established
奇怪的是,在
setRequestMethod
上,
conn.connected
返回前面的
false

我错过了什么

URL url = new URL("https://ws.audioscrobbler.com/2.0/");
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setReadTimeout(15000);
conn.setConnectTimeout(15000);
// here conn.connected is false
conn.setRequestMethod("POST"); // here I get java.net.ProtocolException: Connection already established
conn.setDoInput(true);
编辑


我尝试了DefaultHttpClient,它可以工作,所以我会用它来代替。

我尝试了
DefaultHttpClient,它可以工作,所以我会用它来代替。

对于遇到这个问题的任何其他人,我有一个操作顺序问题,只有在我写一篇请求正文中有内容的HTTP文章时,它才影响到我。并非所有情况下都完全清楚HttpURLConnection何时实际启动到服务器的连接

我最初的请求如下:

        HttpURLConnection conn = null;
        try
        {
            conn = (HttpURLConnection) baseUrl.openConnection();  
            conn.setConnectTimeout(connectTimeoutMillis);
            conn.setReadTimeout(requestTimeoutMillis);

            //required for reading a response body
            conn.setDoInput(true);

            //Not all request types have a body (e.g. GET usually doesn't)
            if(requestBody != null && requestBody.length > 0)
            {
                conn.setDoOutput(true);
                conn.setFixedLengthStreamingMode(requestBody.length);
                conn.getOutputStream().write(requestBody);
                conn.getOutputStream().flush();
                conn.getOutputStream().close();
            }

            try
            {
                conn.setRequestMethod(verb.toUpperCase());
            }
            catch (final ProtocolException e)
            {
                response.setError("Invalid HTTP verb \"" + verb + "\" received.","");
                Log.e(TAG, response.errorMessage, e);
                return response;
            }
事实证明,在调用“conn.getOutputStream()”之后无法调用“conn.setRequestMethod(…)”,因此在我的例子中,简单的解决方法是在处理写入请求正文之前调用“conn.setRequestMethod(…)”。工作守则是:

HttpURLConnection conn = null;
        try
        {
            conn = (HttpURLConnection) baseUrl.openConnection();  
            conn.setConnectTimeout(connectTimeoutMillis);
            conn.setReadTimeout(requestTimeoutMillis);

            //required for reading a response body
            conn.setDoInput(true);

            try
            {
                conn.setRequestMethod(verb.toUpperCase());
            }
            catch (final ProtocolException e)
            {
                response.setError("Invalid HTTP verb \"" + verb + "\" received.","");
                Log.e(TAG, response.errorMessage, e);
                return response;
            }

            //Not all request types have a body (e.g. GET usually doesn't)
            if(requestBody != null && requestBody.length > 0)
            {
                conn.setDoOutput(true);
                conn.setFixedLengthStreamingMode(requestBody.length);
                conn.getOutputStream().write(requestBody);
                conn.getOutputStream().flush();
                conn.getOutputStream().close();
            }

唯一真正的改变就是改变调用的顺序,这样就消除了异常。希望这能为其他有这个问题的人解决这个问题。

在Java中工作。什么是连接的
?你确定这就是所有的密码吗?。还有更多代码,但在返回异常的行之后。当它是
HttpURLConnection
(非https)时,此功能可以工作,并且使用
DefaultHttpClient
使用https。您能解释一下如何使用
conn.connected
?据我所知,当您执行
url.openConnection()
时,您已经建立了连接。请注意,
url.openConnection()
返回的是
URLConnection
,而不是
HttpsURLConnection
。我在
conn.setRequestMethod(“POST”)上设置了一个断点
并检查conn的成员。@haike00 No。TCP连接是在您第一次调用
getOutputStream(),
getInputStream(),
getResponseCode(),
中的一个时建立的,除非它是一个已建立的池连接。如何在没有->conn.setRequestMethod(“post/get”)的情况下分配post get@deliver不是这行
conn.setRequestMethod(verb.toUpperCase())的意思吗正在做什么?如果你把“setRequestMethod”写为:连接已经打开,应用程序崩溃@交付您确定没有使用错误的第一个示例而不是正确的第二个示例吗?如果您对OutputStream对象做了任何操作,即使只是调用
getOutputStream()
,设置请求方法也为时已晚。