ฉันพยายามส่งคำขอโพสต์ไปยัง url โดยใช้ HttpURLConnection (สำหรับการใช้ cUrl ใน java) เนื้อหาของคำร้องขอคือ 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 Framework และ Jaxb2Marshaller เพื่อสร้าง xml การตอบสนอง
คลาส ReadWriteTextFile ถูกนำมาจากที่นี่
ขอบคุณ.
แก้ไข: มันบันทึกข้อมูลในฐานข้อมูลและส่งกลับรหัสสถานะการตอบกลับ 404 ในเวลาเดียวกัน
ฉันลองทำ curl โดยใช้ php และพิมพ์ออกมาCURLINFO_HTTP_CODE
ซึ่งกลายเป็น 200
มีความคิดเห็นเกี่ยวกับการแก้ไขข้อบกพร่องนี้อย่างไร ทั้งบริการและไคลเอ็นต์อยู่บนเซิร์ฟเวอร์ภายใน
ได้รับการแก้ไข: ฉันสามารถแก้ปัญหาได้หลังจากอ้างถึงคำตอบของ SO เอง
ดูเหมือนว่า HttpURLConnection จะส่งกลับการตอบสนอง 404 เสมอเมื่อเชื่อมต่อกับ url ด้วยพอร์ตที่ไม่ได้มาตรฐาน
การเพิ่มบรรทัดเหล่านี้แก้ไขได้
con.setRequestProperty("User-Agent","Mozilla/5.0 ( compatible ) ");
con.setRequestProperty("Accept","*/*");