本文共 2151 字,大约阅读时间需要 7 分钟。
大家好,我是烤鸭:
记一次 由 HttpsURLConnection 引起的返回值400的错误。HttpsURLConnection conn = (HttpsURLConnection) reqURL.openConnection();conn.setRequestMethod("POST");conn.setDoInput(true);conn.setDoOutput(true);conn.setRequestProperty("Accept", "*/*");conn.setRequestProperty("User-Agent", "stargate");conn.setRequestProperty("Content-Type", "application/json");OutputStreamWriter osw = new OutputStreamWriter(conn.getOutputStream(), "utf-8");osw.write(reqStr);osw.flush();osw.close();
这是改动的地方,加了句log。
OutputStreamWriter osw = new OutputStreamWriter(conn.getOutputStream(), "utf-8");log.info("【返回值】"+conn.getResponseCode());osw.write(reqStr);osw.flush();osw.close();
getInputStream方法中调用的是getInputStream0()。
public synchronized InputStream getInputStream() throws IOException { this.connecting = true; SocketPermission var1 = this.URLtoSocketPermission(this.url); if (var1 != null) { try { return (InputStream)AccessController.doPrivilegedWithCombiner(new PrivilegedExceptionAction() { public InputStream run() throws IOException { return HttpURLConnection.this.getInputStream0(); } }, (AccessControlContext)null, var1); } catch (PrivilegedActionException var3) { throw (IOException)var3.getException(); } } else { return this.getInputStream0(); } }
getInputStream0方法中
if setDoInput(true) if else 抛出rememberedException异常 if else 输入流不为空 else 输出的方式是否是流的形式 往对应的服务器写一段文字,主要调用的是这个方法
writeRequests,看是否正常响应,响应后关闭流。
看到这大概就明白了。关于400的说明—— HTTP 400 错误 - 请求无效 (Bad request);出现这个请求无效报错说明请求没有进入到后台服务里
不能忽略每一次小的改动。一句小小的log都可能导致问题,还有就是要多测试。
转载地址:http://ocmlf.baihongyu.com/