java - 通过 HTTP 发送 XML 时出现问题

标签 java php xml

我想要一个应用程序来解析各种 RSS 源并将信息发送到远程服务器。信息以 xml 格式通过 http 发送。起初,我尝试在自己的服务器上部署此应用程序,因此我使用this tutorial中所示的方法发送xml。通过 Java 技巧。这是我从示例中复制的代码:

第一种方法

    String strURL = "http://localhost/readme/readme_xml";
    String strXMLFilename = "output.xml";
    File input = new File(strXMLFilename);


    PostMethod post = new PostMethod(strURL);
    post.setRequestEntity(new InputStreamRequestEntity(
            new FileInputStream(input), input.length()));
    post.setRequestHeader(
            "Content-type", "text/xml; charset=ISO-8859-1");
    HttpClient httpclient = new HttpClient();
    try {

        int result = httpclient.executeMethod(post);            
        System.out.println("Response status code: " + result);            
        System.out.println("Response body: ");
        System.out.println(post.getResponseBodyAsString());            
    } finally {
        post.releaseConnection();
    }

这工作得很好(我什至使用本地主机之外的远程服务器进行了测试)。然后,不知何故,我无法使用自己的服务器来部署此应用程序,因此我决定迁移到 Google Apps Engine。据我们所知,关于它的一件事是,并非所有库都允许在环境中使用。所以我尝试了ExampleDepot.com中显示的另一种方法(虽然我找不到确切的网址),如下所示:

第二种方法

try {
           /* fill up this url with the remote server url */
            URL url = new URL("http://localhost/readme/readme_xml");
            FileReader fr = new FileReader("output.xml");
            char[] buffer = new char[1024*10];
            int len = 0;
            if ((len = fr.read(buffer)) != -1){
            /* send http request to remote server */
                URLConnection conn = url.openConnection();
                conn.setRequestProperty("Content-Type","text/xml;charset=ISO-8859-1"); /* need to specify the content type */
                conn.setDoOutput(true);
                conn.setDoOutput(true);
                PrintWriter pw = new PrintWriter(conn.getOutputStream());
                pw.write(buffer, 0, len);
                pw.flush();
                /* receive response from remote server*/
                BufferedReader bf = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                String input = null;
                while ((input = bf.readLine()) != null){
                    System.out.println(input);
                }
            }

        } catch (MalformedURLException e) {
                e.printStackTrace();
        } catch (FileNotFoundException e) {
                e.printStackTrace();
        } catch (IOException e) {
                e.printStackTrace();
        }
    }

但是第二种方法不起作用并给出以下错误(我使用 SimpleXMLElement (php) 对象来解析远程托管中的 xml):

Error message from remote server

这是来自远程服务器的 php 代码(在这里,我只想让 SimpleXMLElement 解析 xml,暂时不做任何其他事情)

$xml = new SimpleXMLElement('php://input', NULL, TRUE);
   foreach ($xml -> attributes() as $name => $val){
   echo "[".$name."] = ".$val."\n";
   }

我认为这个问题的原因是xml文件故障(因为eclipse IDE指示存在“1字节utf-8序列的无效字节1”错误)。然后我使用与第一种方法完全相同的输入 xml 文件,但它仍然可以完美运行。

那么我需要对第二种方法做一些调整吗?或者还有其他方法可以用来将 xml 文件发送到远程服务器吗?如果我需要添加一些其他详细信息,请告诉我。感谢您的帮助。

<小时/>

注意:我实际上通过使用评论中给出的解决方案解决了这个问题。我没有使用答案中建议的方法,尽管这些答案非常有用。因此,我没有从给出的答案中选择最佳答案。尽管如此,我仍然感谢你们所有的帮助,因此值得我投票。干杯!

最佳答案

我想您需要将内容类型更改为 multipart/form-data。 See an already answered question详细。文件上传将在本例的底部讨论

关于java - 通过 HTTP 发送 XML 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7010823/

相关文章:

xml - 在另一个xpath表达式中使用XPATH的结果

c# - 如何使用XSD生成的类

java - 不可变类的存储区域

java - 在java中检查另一个 map 中一个 map 的内容

java - 字符串替换所有线程不安全

php - 如何显示 'live' 上传的文件总数?

java - context=this 让我的应用程序停止工作

php - : <derived2> Using temporary; Using filesort 查询非常慢

php - ZF2 ServiceManager 无法创建doctility.entitymanager.orm_default

java - 如何在Android ListView中加载list_item_event.xml?