0

我需要将一些 XML 数据发布到远程服务器进行处理。服务器协议已定义且不可更改。我要发布的 XML 数据是在本地服务器上运行的 PHP 页面中动态生成的。我不希望用户必须将该 XML 数据保存到文件中,然后浏览该文件以将其上传到远程服务器(这对用户不友好且毫无意义)。我的问题是如何使用 PHP 函数来做到这一点(可以通过使用 'input file=' 字段编码 HTML 表单来做到这一点,但这意味着用户必须浏览文件)。我得到了一个示例,我需要编写 PHP 代码,该代码将准确再现示例中的标头并将其发送到远程服务器。有什么线索可以帮助我吗?

POST http://doi.crossref.org/servlet/deposit?  operation=doMDUpload&login_id=USER&login_passwd=PSWD&area=live HTTP/1.1 
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */* 
Accept-Language: en-us Content-Type: multipart/form-data; boundary=---------------------------7d22911b10028e 
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461) 
Host: Myhost 
Content-length: 1304 Pragma: no-cache -----------------------------7d22911b10028e 
Content-Disposition: form-data; name="fname"; filename="crossref_query.xml" 
<?xml version="1.0" encoding="UTF-8"?> 

.....XML data....

-----------------------------7d22911b10028e--

我尝试过但没有成功的事情:XML 数据的表单和 input=hidden 字段(发布的数据不包含文件名,因此被远程服务器拒绝);http_post_data() - 只是在远程服务器上给了我一个内部服务器错误;手动编码数据流并在使用 fopensocket 后通过端口 80 套接字发送 - 即使在使用 tcpdump 逐个字符地检查了我发送的流之后,服务器也无法识别该流包含 POST 表单数据。如你所见,我越来越绝望了!

4

2 回答 2

0

从这里...

 $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_VERBOSE, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible;)");
    curl_setopt($ch, CURLOPT_URL, _VIRUS_SCAN_URL);
    curl_setopt($ch, CURLOPT_POST, true);
    // same as <input type="file" name="file_box">
    $post = array(
        "file_box"=>"@/path/to/myfile.jpg",
    );
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
    $response = curl_exec($ch);
于 2011-02-25T22:08:20.760 回答
0

所以你说用户打开了一个浏览器窗口,并且可以从本地服务器访问 XML 文件(我假设他们的浏览器可以通过 http 访问),并且你希望浏览器充当一种通道来传递该 XML 文件的内容到您的远程服务器?并且远程服务器无权访问该本地 XML 文件?

安全问题使这几乎不可能做到。(您不希望雅虎在您浏览时从您的本地网络中提取随机文件,对吧?)

只有当您对本地服务器提供 XML 的方式有一定的控制权时,才能做到这一点。在这种情况下,您可以利用 JSONP 来解决安全问题,并允许浏览器中的页面将数据作为 AJAX 帖子提交到您的远程服务器。

于 2011-02-25T22:19:03.817 回答