我试图将一些数据发送到包含一些帖子数据的网址。我尝试了以下代码: -
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代码......
有什么想法吗?
答案 0 :(得分:3)
有什么想法吗?
您没有检查HTTP响应状态。这会给你一些关于出了什么问题的线索。响应状态可以指示各种事物;例如您的请求参数错误,URL错误,您没有权限,您需要登录,服务器已关闭,等等。
如果您收到非2xx响应代码,则响应正文中可能会有更多信息。您可以通过打开并读取连接对象的错误流来访问它。
检查服务器日志。
尝试使用网络浏览器或curl
或wget
等实用程序提交相同的请求。 (将POST参数放入文件中......或将它们附加到URL。)
捕获并仔细检查Java程序实际发送的编码POST数据。您可以修改程序以在发送之前打印data
,或者您可以使用Wireshark(或等效的)从线路上读取请求。捕获数据后,请仔细比较HTML规范中有关编码表单数据的内容;见http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4
最后,您没有在请求中设置内容类型标头。很可能这会导致服务器忽略POST数据。阅读HTTP规范以获取应设置的标头的描述。 (在这种情况下,您应该使用由mime类型“application / x-www-form-urlencoded”和您正在使用的内容编码组成的内容类型 - “UTF-8”;请参阅http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17)< / p>
我不会在代码示例结尾处提及压缩憎恶的例外情况....
糟糕!我刚做了: - )