1

关于发送http请求过程中,出现的java.net.SocketException: Unexpected end of file from server错误情况记录

  1. 使用HttpURLConnection发送http请求的时候出现错误,经过排查发现是时间参数携带就会出现这个问题,时间参数的格式是
1
2
3
4
5
6
7
8
9
10
11
12
13
urlxxxx?time=2020-09-05 00:12:10
如果没有时间参数则请求发送正常
所以感觉是空格的问题,使用URL字符串转义,把参数进行转义,直接
String endDate = format_hms.format(date).replace(" ","%20");
转义完成后空格就消失了,结果HTTP请求就正常了。
URL字符转义 对应的16进制字符集编码
+ URL 中+号表示空格 %2B
空格 URL中的空格可以用+号或者编码 %20
/ 分隔目录和子目录 %2F
? 分隔实际的URL和参数 %3F
% 指定特殊字符 %25
# 表示书签 %23
& URL 中指定的参数间的分隔符 %26

java中专门的HTTP请求转义和解析

1
java.net.URLEncoder.encode(String s)和java.net.URLDecoder.decode(String s);
1
2
3
4
5
6
7
编码
String encode = URLEncoder.encode(" ", "UTF-8");
System.out.println(encode);
解码
String decode = URLDecoder.decode(encode, "UTF-8");
System.out.println(decode);

使用下面的方法编码,空格会变成+加号,使用上面的逻辑把空格变成%20两种方法都可以成功调用方法。

这个问题在使用feign的时候,也会发生这个情况

image-20200910092203387

image-20200910092210652

原来的2020-09-05+00:12:10写的是2020-09-05 00:12:10

使用2020-09-05 00:12:10就会报错

使用2020-09-05+00:12:10就会正确,

这个后面更深层次的问题应该是Feign的url编码器的问题,等有空了研究一下feign的编码器等问题。