为什么服务器返回响应代码400(错误请求)? (不起作用)
URL serverAddress = new URL(uri);
HttpURLConnection connection = (HttpURLConnection) serverAddress.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestProperty("Content-Type", contentType);
connection.setRequestMethod("POST");
int status = connection.getResponseCode(); // returns 400
例如,此HTTP GET返回代码200 :(工作)
/** Creating Connection **/
URL serverAddress = new URL(uri);
HttpURLConnection connection = (HttpURLConnection) serverAddress.openConnection();
connection.setRequestProperty("Content-Type", contentType);
connection.setRequestMethod("GET");
connection.setDoOutput(false);
int status = connection.getResponseCode(); // returns 200
答案 0 :(得分:7)
在我实际写入流并关闭流之前,我尝试获取响应代码(connection.getResponseCode())( writer.write()和 os.close())这就是服务器返回错误请求代码(400)的原因。 这是我现在可以使用的代码:
/** Creating Connection **/
URL serverAddress = new URL(uri);
HttpURLConnection connection = (HttpURLConnection) serverAddress.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestProperty("Content-Type", contentType);
connection.setRequestMethod("POST");
/** POSTing **/
OutputStream os = connection.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
writer.write(getQuery());
writer.flush();
writer.close();
os.close();
connection.connect();
int status = connection.getResponseCode();//this cannot be invoked before data stream is ready when performing HTTP POST
PrinterClass.show(status); //status
if (status != 200)
throw (new RESTfulWebServiceException("Invalid HTTP response status "
+ "code " + status + " from web service server."));
private String getQuery() throws UnsupportedEncodingException
{
JSONObject jobj = new JSONObject();
jobj.put("customerNumber", new JSONString("003"));
jobj.put("mappingCode", new JSONString("jac_003"));
jobj.put("name", new JSONString("johnny"));
jobj.put("status", new JSONString("ACTIVE"));
PrinterClass.show(jobj.toString());
return jobj.toString();
}
答案 1 :(得分:1)
错误400 means Bad Request。您没有向我们展示您尝试请求的URI,但是,URI很可能只接受GET请求并且没有办法响应POST请求,因此它会引发400错误。例如,请求显示带有GET的照片列表的页面是有意义的,但是对该页面发出POST请求根本就没有意义。
另一种可能性是您可能提供了错误的内容类型。通常,在发出POST请求时,您希望使用application/x-www-form-urlencoded
,这是您在互联网上提交任何网络表单时使用的内容类型。此外,您可能无法提供服务器所需的表单数据。想象一下,您尝试在Facebook上发布消息,但您没有提供任何消息。服务器将正确地解除您的空请求。
如果您向我们提供您正在使用的请求URI和内容类型,我们可以帮助您进一步调试。
答案 2 :(得分:1)
查看合作伙伴电话的文档。 get操作显示所有伙伴,post操作需要设置一个body。你不要在你的代码中发送正文,因此你发送了一个错误的请求。
答案 3 :(得分:1)
就我而言,我的网址字符串中有空格。我用%20替换它并且它有效。
requestUrl = requestUrl.replace(" ", "%20");
答案 4 :(得分:0)
对我来说,它是在我为POST请求设置outputStream值之前从inputStream读取的。我将os.write()...
的{{1}}部分移到了{p
OutputSteam os = ...