用接口工具测试接口可以成功,但是在代码中调用就是一直报链接不上的错误,
java.net.ProtocolException: Cannot write output after reading input.
但是把conn.getResponseCode();这一行代码去掉之后,就可以正常访问,或者把这一样代码放到
outs = new OutputStreamWriter(conn.getOutputStream());这个链接的后面,这样也行
原因是:
The HTTP protocol is based on a request-response pattern: you send your request first and the server responds. Once the server responded, you can't send any more content, it wouldn't make sense. (How could the server give you a response code before it knows what is it you're trying to send?)
So when you call server.getResponseCode()
, you effectively tell the server that your request has finished and it can process it. If you want to send more data, you have to start a new request.
Looking at your code you want to check whether the connection itself was successful, but there's no need for that: if the connection isn't successful, an Exception
is thrown by server.connect()
. But the outcome of a connection attempt isn't the same as the HTTP response code, which always comes after the server processed all your input
意思是说提前调用 getResponseCode()方法,表示该请求已经结束了,若要再写入数据,需要发起一个新的请求
注释:这一段英文摘自https://blog.youkuaiyun.com/bidewang_wolf/article/details/77164622,