首页 > 解决方案 > 使用 DefaultHttpClient 尝试 POST 请求时连接重置

问题描述

我有一个从 java 后端代码中的服务调用获得的字符串值。当我得到一个字符串的值时,我想发出一个 post 请求并将字符串作为 url 编码的 base 64 字符串传递给端点。

问题是我得到一个 Socket Exception: Connection reset 错误。我正在使用 HttpClient 4.5.2 和 IBM Websphere (Rational Application Development) 更详细的错误是:

DefaultHttpClient org.apache.http.impl.client.DefaultRequestDirector tryConnect I/O Exception (java.net.SocketException) caught when connecting to {s} -> https://foo.bar:443: Connection reset 

Java代码:

public ActionForward executeShowFormView(
            ActionMapping mapping, 
            ActionForm form, 
            HttpServletRequest request, 
            HttpServletResponse response) throws Exception 
{
  var stringResponse = serviceCall.getStringResponse(); 
  DefaultHttpClient client = new DefaultHttpClient();
  HttpPost post = new HttpPost(serviceCall.getEndpointUrl()); 
  StringEntity entity = new StringEntity("response=" + stringResponse, ContentType.APPLICATION_TYPE_URLENCODED); 
  post.setEntity(entity); 
  HttpResponse response1 = client.execute(post); 
}

我能做些什么来修复错误?

标签: javajspstrutsapache-commons-httpclientconnection-reset

解决方案


就我而言,我使用了 httpclient post 方法。我将请求标头值设置为

post.setRequestHeader("Content-type", "text/xml; charset=ISO-8859-1"). 

我的应用程序已投入生产并成功运行了 1 年。突然它停止工作,我收到 javax.net.ssl.SSLProtocolException: Connection reset

使固定:

我变了post.setRequestHeader("Content-Type", "application/xml")

这解决了我的问题。


推荐阅读