【问题标题】:Java - Upload file using POST to URL then retrieve responseJava - 使用 POST 将文件上传到 URL,然后检索响应
【发布时间】: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 之类的工具找出需要哪些参数并将其写入您的请求中。由于您正在上传文件,因此请查看多部分请求。

标签: java http url post


【解决方案1】:

我意识到我几乎做对了。 在与网站的开发人员交谈后,我意识到我可以将 GPX 文件作为字符串发送。 (这很简单) 然后我把这个字符串放入参数中,这很有效!

String data = URLEncoder.encode("data", "UTF-8") + "=" + URLEncoder.encode("convertedGPX", "UTF-8");

OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 2017-12-06
    • 2017-12-21
    • 1970-01-01
    相关资源
    最近更新 更多