gpt4 book ai didi

Android:HttpUrlConnection 使用 POST 发送请求主体(而不是 GET)

转载 作者:可可西里 更新时间:2023-11-01 17:34:29 27 4
gpt4 key购买 nike

我正在开发一个与(我们自己的)API 通信的 Android 应用程序。它旨在通过请求方法 POST 在操纵请求和非操纵请求 GET 中使用 API(因为它应该是 RESTful应用程序)。

为了对请求进行身份验证或向请求添加参数,已使用 HTTP 请求正文(在 GET 和 POST 请求中)。 (是的,可以并允许将请求主体添加到每个 HTTP 定义的 GET 请求中(参见 e.g. this post ))。该帖子一般说,可以添加请求主体,但服务器可能不会在请求期间使用它。

问题是,请求方法总是设置为 POST,即使我在连接配置期间将它设置为 GET,也没有问题,即使 getRequestMethod 确实如此通过 setRequestMethod("GET") 将其设置为 GET 后返回 GET。

Android 应用程序使用 HttpsURLConnection(它是 HttpURLConnection 的扩展类,因此它的行为应该类似)。

通过调用这些方法,请求主体将被参与:

https.setDoInput(true);
OutputStream os = https.getOutputStream();
os.write(outputInBytes);
os.close();

并且通过调用https.setRequestMethod("GET"),请求方法应该设置为GET。

经过一些调查,OutputStream os = https.getOutputStream(); 行将请求方法设置为 POST,之后我再次将其设置为 GET,并且在连接结束之前保持 GET (由 https.getRequestMethod() 返回)

但最终服务端收到请求方式为POST的请求。

所以我的具体问题是:

  • 这个问题是否有可能的解决方法/解决方案?
  • 向 GET 请求添加请求主体真的有那么糟糕吗?

目前我刚刚将所有请求都设置为 POST,所以它没有问题(我不会有任何问题,但出于几个原因我想确定没有解决此问题的其他方法)

编辑:documentation of the getOutputStream() method说:

The default request method changes to "POST" when this method is called.

最佳答案

默认 HttpURLConnection是一个 GET 方法(getDoInput() 默认为 true)。

如果您使用 setDoOutput(true)它将成为一个 POST 方法。

如果您需要其他方法(PUT、DELETE 等...),那么您将使用 setRequestMethod(string)。

当然你必须在connect()方法之前选择你想要的方法

关于Android:HttpUrlConnection 使用 POST 发送请求主体(而不是 GET),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35684474/

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