在 java 中使用 REST 调用模拟 cURL 时出错
Error when simulating cURL using a REST call in java
目前我能够 运行 curl 中的以下命令,其中 returns json 响应如预期。请注意,输入 JSON 在请求中按名称 "json" 作为表单参数发送。 API 将仅接受 JSON 请求,并且将仅支持 POST 方法调用。
要求
curl --data 'json={ "startdate": "2012-10-10", "enddate":"2012-10-11" }' http://xxxxx.xxxx.xxx/xxxx/xxxx/xxxx/xxxx
回应
{"startdate":"2012-10-10","status":"true","Api Name":"xxxx","output":{"ROW":"49","EU":"54","NA":"33"},"enddate":"2012-10-11"}
我正在 java.
中使用 REST 调用模拟上述 cURL 命令
代码如下
String urlString = "http://xxxxx.xxxx.xxx/xxxx/xxxx/xxxx/xxxx";
URL myUrl = new URL(urlString);
URLConnection urlConn = myUrl.openConnection();
String myData = "json={ \"startdate\": \"2012-10-10\", \"enddate\":\"2012-10-11\" }" ;
urlConn.setRequestProperty("data", myData);
urlConn.connect();
BufferedReader in = new BufferedReader(newInputStreamReader(urlConn.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine);
}
in.close();
但是上面的代码returns下面的错误。
堆栈跟踪如下所示。
Exception in thread "main" java.io.IOException: Server returned HTTP response code: 405 for URL: http://xxxxx.xxxx.xxx/xxxx/xxxx/xxxx/xxxx
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1615)
at dashboard.access.data.RAccess.main(RAccess.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
也许:
urlConn.setRequestMethod("POST");
在 openConnection()
之后会修复它吗?你说你的 api 只允许 post 请求。你会得到一个不允许的 405 方法。
如果没有,您可以试试这个 link,查看第一 Java HttpURLConnection example
章节中的 sendPost() 方法:
http://www.mkyong.com/java/how-to-send-http-request-getpost-in-java/
请确保以下文件中实施的安全性是正确的。
AuthenticationFilter.java
AutherizationFilter.java
SecurityConstants.java
WebSecurity.java
Bcz spring安全是由spring实现的,我们无法定位到正确的异常位置。
目前我能够 运行 curl 中的以下命令,其中 returns json 响应如预期。请注意,输入 JSON 在请求中按名称 "json" 作为表单参数发送。 API 将仅接受 JSON 请求,并且将仅支持 POST 方法调用。
要求
curl --data 'json={ "startdate": "2012-10-10", "enddate":"2012-10-11" }' http://xxxxx.xxxx.xxx/xxxx/xxxx/xxxx/xxxx
回应
{"startdate":"2012-10-10","status":"true","Api Name":"xxxx","output":{"ROW":"49","EU":"54","NA":"33"},"enddate":"2012-10-11"}
我正在 java.
中使用 REST 调用模拟上述 cURL 命令代码如下
String urlString = "http://xxxxx.xxxx.xxx/xxxx/xxxx/xxxx/xxxx";
URL myUrl = new URL(urlString);
URLConnection urlConn = myUrl.openConnection();
String myData = "json={ \"startdate\": \"2012-10-10\", \"enddate\":\"2012-10-11\" }" ;
urlConn.setRequestProperty("data", myData);
urlConn.connect();
BufferedReader in = new BufferedReader(newInputStreamReader(urlConn.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine);
}
in.close();
但是上面的代码returns下面的错误。
堆栈跟踪如下所示。
Exception in thread "main" java.io.IOException: Server returned HTTP response code: 405 for URL: http://xxxxx.xxxx.xxx/xxxx/xxxx/xxxx/xxxx
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1615)
at dashboard.access.data.RAccess.main(RAccess.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
也许:
urlConn.setRequestMethod("POST");
在 openConnection()
之后会修复它吗?你说你的 api 只允许 post 请求。你会得到一个不允许的 405 方法。
如果没有,您可以试试这个 link,查看第一 Java HttpURLConnection example
章节中的 sendPost() 方法:
http://www.mkyong.com/java/how-to-send-http-request-getpost-in-java/
请确保以下文件中实施的安全性是正确的。
AuthenticationFilter.java
AutherizationFilter.java
SecurityConstants.java
WebSecurity.java
Bcz spring安全是由spring实现的,我们无法定位到正确的异常位置。