【问题标题】:Why all my https request are consider in server log as POST?为什么我的所有 https 请求都在服务器日志中被视为 POST?
【发布时间】:2019-08-27 02:48:29
【问题描述】:

为什么我的所有请求方法(post、get、delete)都被视为 POST 方法?如果代码有问题,您能解释一下是什么问题以及如何解决它?

该方法有一个字符串参数,我将其更改为 post/delete/get 对于所有请求,我得到了 https 错误代码 405,但对于帖子,我得到了 200。

谢谢

my code -

【问题讨论】:

  • 首先,请避免发布您的代码截图,而是以代码格式将它们发布在您的问题中,其次,您的method 变量设置为connection.setMethod(method) 中使用的变量是什么,这就是决定 http 请求方法的原因。
  • 我知道,我用 "POST" 和 "GET" 和 "DELETE" 调用该方法 3 次,它是一个包含方法类型的字符串

标签: java post https get


【解决方案1】:

嗯,Http-Code 405 的意思是:Method Not Allowed => 你的服务器只实现了一个POST 方法。在您在服务器上实现其他方法之前,您将无法从您的客户端调用它们。

【讨论】:

  • 在我的服务器中,我已经实现了 3 种方法,它们使用 curl 命令进行了测试 - 工作得非常好,我现在想使用 Java 我认为使用一种方法进行 post-get-delete 的逻辑不是正确 - 我相信发布不需要但获取或删除需要不同的参数
  • 不,如果你得到 405,那么你的问题出在服务器端。您可以轻松地在浏览器中对其进行测试,只需将 url 放入浏览器选项卡中,然后看看您会得到什么。浏览器会自动发送GET请求
  • 等一下,也许您的问题是您为GETDLETE 请求编写了正文,GETDELETE 请求不应包含正文。尝试从您的代码中删除它
  • 它可以在带有 get/post/delete 的浏览器中工作 - 它可以在没有正文的情况下工作,但我需要传递 username-password ,我该怎么做?
  • 对于GETDELETE,您需要在url 本身中传递参数,例如:https://www.example.com/test?username=demo&password=demo 但请记住,您将在你的日志。您应该只使用 POST 请求发送您的凭据
【解决方案2】:

我已经解决了这个问题,因为 POST 方法需要正文,而 GET 和 DELETE 不需要正文,对于身份验证,我使用了 basicauth。

        if (user_name != "" || password != "")
            {
                if (method == "POST")
                {
                    // write body to query
                    String body = "username=" + user_name + "&password=" + password;
                    OutputStream os = connection.getOutputStream();
                    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
                    writer.write(body);
                    writer.flush();
                    writer.close();
                    os.close();
                }
                else
                {
                    String userpass = user_name + ":" + password;
                    String basicAuth = "Basic " + new String(Base64.getEncoder().encode(userpass.getBytes()));
                    connection.setRequestProperty ("Authorization", basicAuth);
                    InputStream in = connection.getInputStream();

                }

           }
            // connect
            connection.connect();
            //results
            String results = request_call_results(connection);
            JSONObject json = String_toJson(results);
            return json;

【讨论】:

    最近更新 更多