public static String httpRequest(String urlStr, String content, String requestMethod) throws IOException {
URL url = new URL(urlStr);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod(requestMethod);
connection.setUseCaches(false);
connection.setConnectTimeout(1000 * 5);//5秒
connection.setReadTimeout(1000 * 60);//1分钟
connection.setInstanceFollowRedirects(true);
connection.setRequestProperty("Content-type", "application/json");
connection.setRequestProperty("Authorization","esmadmin");
connection.connect();
Writer writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream(), "UTF-8"));
if (content != null && !"".equals(content)) {
writer.write(content);
writer.flush();
writer.close();
InputStream in = null;
if (connection.getResponseCode() >= 400) {
in = connection.getErrorStream();
} else {
in = connection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
StringBuilder response = new StringBuilder();
String tmp;
while ((tmp = bufferedReader.readLine()) != null) {
response.append(tmp);
if (in != null) {
in.close();
bufferedReader.close();
connection.disconnect();
return response.toString();
报错如下:
2017-08-11 08:00:00,441 pool-97-thread-1 ERROR [com.jd.jsf.worker.thread.es.timingTask.TimingTaskRunnableThread:run] - Unexpected end of file from server
java.net.SocketException: Unexpected end of file from server
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:792)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:647)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:789)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:647)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1535)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1440)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)
at com.jd.jsf.worker.util.SimpleHttpClient.request(SimpleHttpClient.java:126)
at com.jd.jsf.worker.util.SimpleHttpClient.put(SimpleHttpClient.java:104)
at com.jd.jsf.worker.thread.es.timingTask.TimingTaskRunnableThread.run(TimingTaskRunnableThread.java:80)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
后面发现上面建立http请求的httpRequest方法中是有一句代码是关键:
connection.setRequestProperty("Content-type", "application/json");
我之前写成 connection.setRequestProperty("Content-type", "JSON");所以一直报错。
后面改成connection.setRequestProperty("Content-type", "application/json");就好了。
这个错误对于低版本的ES好像没问题,例如V2.1.2, V5.2.1都没问题。对于ES5.4.3有问题。应该是高版本的ES对于http请求格式加强了校验。
最近使用elasticsearch,通过http访问,结果报错。最后发现是因为设置http消息内容格式type设置错了。发送http请求的方法如下:public static String httpRequest(String urlStr, String content, String requestMethod) throws IOException { URL u
java.net.SocketException: Unexpected end of file from server
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:806)
at sun.n...
(只想看结论可跳到结尾)
自己是个Android程序员,今天正好打算尝试一下Flutter。
按官方文档说的,下载了SDK,为Android Studio安装了插件,运行flutter doctor也没有问题。
结果项目创建好(默认代码),第一次执行,就报错Exception in thread "main" java.net.SocketException: Unexpected end of...
//百度天气API
String baiduUrl = "http://api.map.baidu.com/telematics/v3/weather?location=北京&output=json&ak=W69oaDTCfuGwzNwmtVvgWfGH";
StringBu
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.H
1. 服务器端已经关闭了连接,或者服务器端程序已经崩溃或停止运行。
2. 客户端在等待服务器响应时发生了超时或网络异常,导致连接中断。
3. 服务器端的防火墙或网络设置阻止了客户端与服务器之间的通信。
解决这个问题的方法包括:
1. 检查服务器端是否正在运行,并确保它能够接受客户端的请求。
2. 检查客户端与服务器之间的网络连接是否正常,并确保客户端能够访问服务器。
3. 调整客户端和服务器的超时设置以确保它们能够在规定的时间内完成通信。
4. 如果使用防火墙,请检查防火墙设置是否允许客户端与服务器之间的通信。
如果以上方法都无法解决问题,可以考虑使用网络调试工具进行故障排除,以确定具体的问题所在。