Android CONNECT的意外响应代码:400

Android CONNECT的意外响应代码:400,android,httpurlconnection,Android,Httpurlconnection,我的一些用户在尝试连接时经常遇到这种异常 java.io.IOException: Unexpected response code for CONNECT: 400 at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeTunnel(HttpsURLConnectionImpl.java:509) at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.make

我的一些用户在尝试连接时经常遇到这种异常

java.io.IOException: Unexpected response code for CONNECT: 400
    at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeTunnel(HttpsURLConnectionImpl.java:509)
    at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:463)
    at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:442)
    at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
    at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
    at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81)
    at libcore.net.http.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:165)
URL connectURL = new URL(url);
HttpURLConnection conn = (HttpURLConnection) connectURL.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setInstanceFollowRedirects(true);
conn.setReadTimeout(30000); 
conn.setConnectTimeout(15000);
conn.setRequestMethod("POST");

connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("Accept-Encoding", "deflate, gzip");
connection.setRequestProperty("Content-Length", postParameters.length() + "");

conn.connect();

OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
writer.write(mRequestObj.getPostParameters());
writer.flush();
writer.close();

responseCode = conn.getResponseCode();

BufferedInputStream bis = null;
try {
    bis = new BufferedInputStream(conn.getInputStream());
}
catch(IOException io) {
    if(conn.getErrorStream() != null) 
        bis = new BufferedInputStream(conn.getErrorStream());
    else 
        throw io;
}

... 
400表示请求错误,但几秒钟后相同的请求成功。我仔细检查了请求,没有问题。我还查看了服务器日志,发现请求似乎还没有到达我们的服务器

我正在使用一个简单的
HttpUrlConnection
来连接

java.io.IOException: Unexpected response code for CONNECT: 400
    at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeTunnel(HttpsURLConnectionImpl.java:509)
    at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:463)
    at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:442)
    at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
    at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
    at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81)
    at libcore.net.http.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:165)
URL connectURL = new URL(url);
HttpURLConnection conn = (HttpURLConnection) connectURL.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setInstanceFollowRedirects(true);
conn.setReadTimeout(30000); 
conn.setConnectTimeout(15000);
conn.setRequestMethod("POST");

connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("Accept-Encoding", "deflate, gzip");
connection.setRequestProperty("Content-Length", postParameters.length() + "");

conn.connect();

OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
writer.write(mRequestObj.getPostParameters());
writer.flush();
writer.close();

responseCode = conn.getResponseCode();

BufferedInputStream bis = null;
try {
    bis = new BufferedInputStream(conn.getInputStream());
}
catch(IOException io) {
    if(conn.getErrorStream() != null) 
        bis = new BufferedInputStream(conn.getErrorStream());
    else 
        throw io;
}

... 

还有其他人面临这个问题吗?有什么可以帮忙的吗

这是个老问题,但也许有人会觉得它很有用

由于代理隧道由于某种原因失败,引发了异常。这就是为什么您的web服务器没有显示任何内容,根本无法访问它


以下描述涉及连接方法类型:

本规范保留方法名称CONNECT供使用 使用可以动态切换为隧道的代理

它是从我的书里抄来的



不幸的是,除非您能够控制代理服务器,否则您无法对此做很多事情。您可以做的是捕获异常并重试连接。

我遇到了相同的问题。有什么想法吗?我遇到了同样的错误,我处理它的方式是捕获IOException并检查连接是否为https,然后重试。考虑到IOException过于泛化,有没有更好的方法捕获这个错误?我想IOException应该可以