我正在尝试使用HttpURLConnection(在Java中使用cUrl)将发布请求发送到url。请求的内容为xml,最后,应用程序处理xml并将记录存储到数据库,然后以xml字符串的形式发送回响应。该应用程序本地托管在apache-tomcat上。
当我从终端执行此代码时,将按预期将一行添加到数据库。但是,从连接获取InputStream时会引发如下异常
java.io.FileNotFoundException: http://localhost:8080/myapp/service/generate
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1401)
at org.kodeplay.helloworld.HttpCurl.main(HttpCurl.java:30)
这是代码
public class HttpCurl {
public static void main(String [] args) {
HttpURLConnection con;
try {
con = (HttpURLConnection) new URL("http://localhost:8080/myapp/service/generate").openConnection();
con.setRequestMethod("POST");
con.setDoOutput(true);
con.setDoInput(true);
File xmlFile = new File("test.xml");
String xml = ReadWriteTextFile.getContents(xmlFile);
con.getOutputStream().write(xml.getBytes("UTF-8"));
InputStream response = con.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(response));
for (String line ; (line = reader.readLine()) != null;) {
System.out.println(line);
}
reader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
它令人困惑,因为异常被跟踪到该行,InputStream response = con.getInputStream();
并且FileNotFoundException似乎没有涉及任何文件。
当我尝试直接打开与xml文件的连接时,它不会引发此异常。
服务应用程序使用spring框架和Jaxb2Marshaller创建响应xml。
类ReadWriteTextFile从这里获取
谢谢。
编辑: 好吧,它将数据保存在DB中,并同时发送回404响应状态代码。
我还尝试使用php进行卷曲,并打印出CURLINFO_HTTP_CODE
结果为200。
关于如何进行调试的任何想法?服务和客户端都在本地服务器上。
解决: 参考SO本身的答案后,我可以解决问题。
似乎使用非标准端口连接到URL时,HttpURLConnection总是返回404响应。
添加这些行解决了它
con.setRequestProperty("User-Agent","Mozilla/5.0 ( compatible ) ");
con.setRequestProperty("Accept","*/*");