多部分/格式数据而无需用户干预我需要一些XML POST数据到用于处理的远程服务器。服务器协议已经定义并且不可更改。我想发布的XML数据是在本地服务器上运行的PHP页面中动态生成的。我不希望用户必须将该XML数据保存到文件中,然后浏览该文件以将其上传到远程服务器(这不是用户友好且毫无意义的)。我的问题是如何使用PHP函数完成此操作(可以通过使用'input file ='字段编码HTML表单来完成此操作,但这意味着用户必须浏览该文件)。我一直在考虑一个例子,我需要的是编写PHP代码,将正是再现头的例子,并将其发送到远程服务器。任何帮助我的线索?发布信息有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数据隐藏字段(发布数据不包括文件名,因此是由远程服务器拒绝); http_post_data() - 刚在远程服务器给我一个内部服务器错误;手动编码数据流,并在使用fopensocket后通过端口80套接字发送它 - 即使在使用tcpdump逐字检查我发送的数据流之后,服务器也无法识别数据流是否包含POST数据。所以你可以说,我越来越绝望了!
你的总结几乎是正确的:XML是不是一个文件,而是产生(由PHP代码)在内存中(特别是,使用$作家=新XMLWriter的();写入器的$> openMemory(); ...东西来创建XML ... $ xml = $ writer-> outputMemory();),所以安全问题不像你想象的那么严重。生成了XML后,我希望PHP页面能够将它传送到远程服务器。 – Nigel 2011-02-26 12:36:14
@micrology:啊,所以你控制的本地服务器能够连接到远程服务器。远程服务器接受通过HTTP发送的文件上传,但不要求您在用户的会话或任何内容上进行身份验证。你只需要做一个http post来发送XML内容,就好像你的本地服务器是一个浏览器上传一个XML文件一样。如果所提供的'curl'方法FatherStorm不起作用,你可以试试这个:http://wezfurlong.org/blog/2006/nov/http-post-from-php-without-curl(如果确实如此工作,一定要接受他的回答)。 – StriplingWarrior 2011-02-27 02:07:37