多部分/格式數據而無需用戶干預我需要一些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