【发布时间】:2013-03-27 16:06:54
【问题描述】:
我想将文件(GPX 文件,类似于 XML)上传到 URL (http://www.gpsvisualizer.com/map_input)。然后等待地图生成并检索它。开发人员表示这是可能的,但我没有得到任何结果。 到目前为止,这是我的代码:
private static void postData(File fileName) {
File input = fileName;
//Setup connection
URL url = new URL("http://www.gpsvisualizer.com/map");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/xml");
connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; .NET CLR 1.2.30703)");
//Send file
OutputStream os = connection.getOutputStream();
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
FileReader fileReader = new FileReader(input);
StreamSource source = new StreamSource(fileReader);
StreamResult result = new StreamResult(os);
transformer.transform(source, result);
os.flush();
//Retrieve response
BufferedReader br = new BufferedReader(
new InputStreamReader(connection.getInputStream()));
String line = br.readLine();
while ( line != null ) {
System.out.println(line);
line = br.readLine();
}
br.close();
}
所有这一切都是在建立连接,当我得到响应时,我只得到初始页面的 HTML,而不是(应该是)地图。
【问题讨论】:
-
地图是否嵌入在html中?来自
connection的 InputStream 将包含 HTTP 响应正文中的所有内容。你必须解析它并提取你想要的东西。 -
地图是嵌入的,但是当我检索到完整的响应时,代码肯定会在那里,但它不是。
-
那么这可能意味着您的 POST 不正确,可能缺少一些参数。查看您发布的链接,有一堆表单参数。你应该填写这些。
-
也许我在这完全错了。通常,使用我创建的 GPX 文件,我会手动将其上传到该站点,然后选择绘制地图。然后这会打开一个带有地图的新页面。如何在代码中复制此方法?
-
当您单击
Draw the map按钮时,您的浏览器会将包含在封闭表单中的不同输入参数附加到您的Http Post 请求中。如果您要通过 java 代码发送相同的请求,则需要将这些参数放入您自己。使用 Firebug 之类的工具找出需要哪些参数并将其写入您的请求中。由于您正在上传文件,因此请查看多部分请求。