0

我试图将一些数据发送到带有一些帖子数据的 url。我尝试了以下代码:-

try {
        // Construct data
        String data = URLEncoder.encode("appid", "UTF-8") + "=" + URLEncoder.encode("2", "UTF-8");
        data += "&" + URLEncoder.encode("secret", "UTF-8") + "=" + URLEncoder.encode("APPSECRET", "UTF-8");
        data += "&" + URLEncoder.encode("usermcaccount", "UTF-8") + "=" + URLEncoder.encode("NAME", "UTF-8");
        data += "&" + URLEncoder.encode("actiontype", "UTF-8") + "=" + URLEncoder.encode("ACTION", "UTF-8");
        data += "&" + URLEncoder.encode("serverip", "UTF-8") + "=" + URLEncoder.encode("IP", "UTF-8");


        // Send data
        URL url = new URL("http://maiacraft.com/api/");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setDoInput(true);
        conn.setRequestMethod("POST");
        DataOutputStream outStream;


        OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());

        //write parameters
        writer.write(data);
        writer.flush();
        writer.close();




    } catch (Exception e) {
    }

然而,它似乎没有将其发布到服务器。所有服务器端代码都在工作,因为它允许来自另一个页面但不允许来自这个 java 代码的发布请求......

有任何想法吗?

4

1 回答 1

3

有任何想法吗?

  1. 您没有检查 HTTP 响应状态。这将为您提供一些关于出了什么问题的线索。响应状态可以指示各种事物;例如,您的请求参数错误、URL 错误、您没有权限、您需要登录、服务器已关闭等。

  2. 如果您收到非 2xx 响应代码,则响应正文中可能包含更多信息。您可以通过打开和读取连接对象的错误流来访问它。

  3. 检查服务器日志。

  4. 尝试使用 Web 浏览器或类似curlor的实用程序提交相同的请求wget。(将 POST 参数放入文件中......或将它们附加到 URL。)

  5. 捕获并仔细检查 Java 程序实际发送的编码 POST 数据。您可以修改程序以data在发送之前打印,或者您可以使用 Wireshark(或等效的)从网络中读取请求。捕获数据后,请仔细将其与 HTML 规范中有关编码表单数据的内容进行比较;见http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4

  6. 最后,您没有在请求中设置内容类型标头。这很可能导致服务器忽略 POST 数据。阅读 HTTP 规范以了解应设置的标头的描述。(在这种情况下,您应该使用由 mime 类型“application/x-www-form-urlencoded”和您正在使用的内容编码 - “UTF-8”组成的内容类型;参见http://www.w3 .org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17


我不会在代码示例的末尾提到异常挤压可憎......

哎呀。我已经做了 :-)

于 2012-03-29T23:48:29.750 回答