Java Http POST没有按预期工作?

时间:2012-03-29 23:17:16

标签: java minecraft

我试图将一些数据发送到包含一些帖子数据的网址。我尝试了以下代码: -

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代码......

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

  

有什么想法吗?

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

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

  3. 检查服务器日志。

  4. 尝试使用网络浏览器或curlwget等实用程序提交相同的请求。 (将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)< / p>


  7. 我不会在代码示例结尾处提及压缩憎恶的例外情况....

    糟糕!我刚做了: - )