gpt4 book ai didi

java - 如何在没有多部分正文的情况下使用 okhttp3 发出 put 请求

转载 作者:行者123 更新时间:2023-11-30 07:11:39 26 4
gpt4 key购买 nike

我的 Web 服务是一个 Java servlet,它接受带有 url 参数的 put 请求以采取特定操作。下面的代码实现了我想要完成的任务,但我很想知道是否有更好的方法可以在不添加多部分主体的情况下发出放置请求。

Java Servlet 中的所有 put 请求都需要多部分主体吗?

使用 okhttp3 发出的所有 put 请求都需要多部分正文吗?

我是否误解了其他内容?

    body = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("", "") // I would love to eliminate this.
.build();

request = new Request.Builder()
.url(url + "?my_param=" + URLEncoder.encode(myParam, "utf-8"))
.put(body)
.build();

response = client.newCall(request).execute();

最佳答案

从实用的角度来看,我想说您正在考虑 Servlet 和/或 OkHttp 的实现限制,并且它可能可以使用不同的库来工作。

但是,

从标准的角度来看,我认为您的方法是不正确的,您应该使用 POST 而不是 PUT。这需要阅读 RFC-2616 (HTTP/1.1) ,第 9.6 节有关 POST 请求的内容,以及 RFC-1630 (URL's in WWW) ,查询字符串部分。

摘自 HTTP 规范,第 9.6 节:

The fundamental difference between the POST and PUT requests is reflected in the different meaning of the Request-URI. The URI in a POST request identifies the resource that will handle the enclosed entity. That resource might be a data-accepting process, a gateway to some other protocol, or a separate entity that accepts annotations. In contrast, the URI in a PUT request identifies the entity enclosed with the request -- the user agent knows what URI is intended and the server MUST NOT attempt to apply the request to some other resource.

来自 URL 规范,第 6 页:

QUERY STRINGS

The question mark ("?", ASCII 3F hex) is used to delimit the boundary between the URI of a queryable object, and a set of words used to express a query on that object. When this form is used, the combined URI stands for the object which results from the query being applied to the original object.

这两者结合起来意味着您无法按照您尝试的方式使用 PUT 请求。

关于java - 如何在没有多部分正文的情况下使用 okhttp3 发出 put 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39139032/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com