我的一些用户在尝试连接时会遇到很多此异常。
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)
400意味着错误的请求,但几秒钟后相同的请求成功。我仔细检查了请求,并没有任何问题。我也检查了服务器日志,看来请求甚至没有到达我们的服务器。
我正在使用简单的HttpUrlConnection
进行连接。
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;
}
...
还有其他人遇到过这个问题吗?什么都可以帮助?
答案 0 :(得分:1)
这是一个古老的问题,但也许有人会发现它有用。
由于代理隧道由于某种原因失败而抛出异常。这就是为什么你的网络服务器没有显示任何内容,根本没有达成的原因。
以下描述涉及CONNECT方法类型:
此规范保留方法名称CONNECT以供使用 使用可以动态切换为隧道的代理
它是从HTTP specification复制的。
不幸的是,除非您拥有对代理服务器的控制权,否则您无法做很多事情。您可以做的是捕获异常并重试连接。