写了一个接口,httpclient,post方式调用远方接口,请求参数按照文档格式写,远端也能收到我的请求参数,但是我的应用没有收到返回响应,换了各种方法,包括原生的连接方式,都获取不到返回值,很奇怪。
之后用Wireshark抓包,发现服务器其实是收到了对方的返回包的,但是从服务器到Nginx分发这一步貌似有问题?一开始是这么想的。然后又用fiddler抓包,抓不到包。后来在crul的时候,-v这个指令给了我一个启发,会不会是因为对方返回的时候没有添加必要的头信息,导致httpclient没有接受这个返回呢?去查对方的返回报文,果然,没有 version,没有content-type,没有content-transfer-encoding等必要的头信息。跟对方沟通后,加上这些头信息,果然,能正常接收了。
原来,对方是用c写的,而C里面是没有这些头信息,这些都是需要手动拼的,对方为了省事加上对JAVA不太了解,就没有加头信息,导致httpclient没有接收和解析返回报文。