【问题标题】:Not getting full HTTP response from HttpClient未从 HttpClient 获得完整的 HTTP 响应
【发布时间】:2018-08-19 12:16:45
【问题描述】:

我似乎没有从 httpclient 获得整个 json 响应。我正在打一个我在本地运行的 api,如下所示:

curl -i -X POST http://localhost:8098/<api location> -F "files=@<filename>"

我的回复是这样的:

{"data":[<bunch of json>]

但是当我尝试使用 httpclients 发布完全相同的文件时,我得到了以下响应:

{"data":[]}

我做错了什么?这是我的java代码。谢谢!

public CloseableHttpResponse submit (File file) throws IOException {
    CloseableHttpClient client = HttpClients.createDefault();
    HttpPost post = new HttpPost(API_LOCATION + API_BASE);
    MultipartEntityBuilder builder = MultipartEntityBuilder.create();
    builder.addBinaryBody("ISO xml file", file, ContentType.APPLICATION_OCTET_STREAM, file.getName());
    HttpEntity multipartEntity = builder.build();
    post.setEntity(multipartEntity);

    CloseableHttpResponse response = client.execute(post);
    System.out.println("response: " + IOUtils.toString(response.getEntity().getContent(),"UTF-8"));
    client.close();
    return response;
}

【问题讨论】:

  • 在 curl 中您将字段命名为 files,但在 Java 中您将其命名为 ISO xml file。由于服务器只寻找files,它什么也看不到,什么也没有响应。
  • 参数名称呢?在 curl 上,您使用了“文件”,在 http 客户端上,您使用了“ISO xml 文件”。尝试将其更改为“文件”。
  • 我将“ISO xml 文件”更改为“文件”并且它有效。我没有意识到那个领域的重要性——我认为它只是为了识别。那么该行末尾的字符串有什么意义呢?我用 file.getName() 填充的字符串???

标签: java apache-httpclient-4.x


【解决方案1】:

正如 Andreas 和 Danilo 在 cmets 中提到的:

在 curl 中您命名字段文件,但在 Java 中您将其命名为 ISO xml 文件。由于服务器只查找文件,它什么也看不到,也什么都没有响应。 - Andreas

参数的名称呢?在 curl 上,您使用了“文件”,在 http 客户端上,您使用了“ISO xml 文件”。尝试将其更改为“文件”。 - Danilo

我需要将“ISO xml 文件”更改为“文件”,它可以工作。

【讨论】:

    猜你喜欢
    • 2017-09-16
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多