当前位置: 首页 > 知识库问答 >
问题:

服务器无法使用有效的HTTP响应进行响应

楚嘉胜
2023-03-14

我正在尝试上传一个xml文件。当使用MultipartEntityBuilder将二进制格式的文件添加到HttpEntity时,我收到以下错误

org.apache.http.ProtocolException: The server failed to respond with a valid HTTP response
    at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:149) ~[httpclient-4.5.3.jar:4.5.3]
    at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56) ~[httpclient-4.5.3.jar:4.5.3]
    at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259) ~[httpcore-4.4.6.jar:4.4.6]

我已经通过了链接

https://www.baeldung.com/httpclient-multipart-upload

我的理解是,该文件不被接受,因为http实体无法发送MultipartEntityBuilder,但我可能错了。


   HttpPost postRequest = new HttpPost("link to server");
   postRequest.setHeader("name1", "value");
   postRequest.setHeader("name2", "value2");
   File file1 = new File(file.getOriginalFilename());
   file1.createNewFile();
   FileOutputStream fileOutputStream = new FileOutputStream(file1);
   fileOutputStream.write(file.getBytes());
   fileOutputStream.close();
   MultipartEntityBuilder multipartEntityBuilder = 
   MultipartEntityBuilder.create();
   multipartEntityBuilder.addBinaryBody("file", file1);
   HttpEntity httpEntity = multipartEntityBuilder.create().addPart("file", new FileBody(file1)).build();
   postRequest.setEntity(httpEntity);

共有1个答案

阎烨
2023-03-14

我怀疑您的代码基本上是正确的,但要么服务器URL错误,要么服务器响应不正确——就HTTP协议而言。

如果您的代码无法发送正确的HTTP请求,我希望服务器使用相应的HTTP 4xx响应代码进行响应。

 类似资料:
  • 正如前面的章节中讨论的那样,当一个 Web 服务器响应一个 HTTP 请求时,响应通常包括一个状态行、一些响应报头、一个空行和文档。一个典型的响应如下所示: HTTP/1.1 200 OK Content-Type: text/html Header2: ... ... HeaderN: ... (Blank Line) <!doctype ...> <html> <head>...</he

  • 问题内容: 我是Go的新手,我正在尝试构建一个简单的HTTP服务器。但是我在JSON响应中遇到了一些问题。我编写了以下代码,然后尝试邮递员发送一些JSON数据。但是,我的邮递员总是得到空响应,而is 。然后,我在http://www.alexedwards.net/blog/golang-response- snippets#json中 检查了一个示例。我复制并粘贴了示例,并且效果很好。但是我看不

  • 在此处输入图像说明public class GemfireTest extends SecurityManager{ C:\users\xxx\ideaprojects\gemfire on Desktop-MRCV2EH[40404]中的服务器,因为server1当前联机。进程ID:2640正常运行时间:7秒Geode版本:9.5.1 Java版本:1.8.0_171日志文件:C:\users\

  • 刚开始使用wiremock,遇到了一个场景,我想用一个特定的json响应来存根GET请求。 将json附加到预期响应时; 我得到例外java.io.FileNotFoundException: src/test/资源/__files/product.json(没有这样的文件或目录)。 问题是我在这个位置有json文件。

  • 问题内容: 我正在尝试使用http客户端通过为单个主机设置最大连接来访问服务器 HttpParams httpParam = httpclient.getParams(); HttpConnectionParams.setSoTimeout(httpParam,SOCKET_TIMEOUT); 那就是我们使用连接池来实现http持久性。 我们偶尔会收到此错误: 有谁知道如何解决这个问题? 我们也将

  • 我在8000和8001端口上的本地linux机器上运行着金刚,在5000和5001端口上的docker容器中也运行着金刚。 我的应用程序正在tomcat服务器上的另一个容器上运行,端口8811(端口fwd从8811到8080) 我已经配置了以下API配置我的Kong容器, 和我的linux机器金刚以下API配置, 当我做curl访问我的示例API时,我看到以下来自我的Kong容器的错误响应, 如果