我正在尝试使用 HttpURLConnection (用于在 java 中使用 cUrl)向 URL 发送一个帖子请求。 请求的内容是 xml,在终点,应用程序处理 xml 并将记录存储到数据库中,然后以 xml 字符串的形式发回响应。这个应用程序本地托管在 apache-tomcat 上。
当我从终端执行此代码时,一行将按预期添加到 db。但是当从连接获取 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();
}
}
}
Its confusing because the exception is traced to the line InputStream response = con.getInputStream();
and there doesn't seem to be any file involved for a FileNotFoundException.
当我尝试直接打开到 xml 文件的连接时,它不会抛出此异常。
服务应用程序使用 spring 框架和 Jaxb2Marshall 来创建响应 xml。
ReadWriteTextFile 类取自 给你
谢谢。
编辑: 它将数据保存在数据库中,同时发回一个404响应状态代码。
我还试着用 php 做一个旋度,然后打印出 CURLINFO_HTTP_CODE
,结果是200。
Any ideas on how do I go about debugging this ? Both service and client are on the local server.
决心: 我可以在参考了 SO 本身的 回答之后解决这个问题。
当用非标准端口连接到 URL 时,HttpURLConnection 似乎总是返回404响应。
加上这些线就解决了
con.setRequestProperty("User-Agent","Mozilla/5.0 ( compatible ) ");
con.setRequestProperty("Accept","*/*");