2012-06-14 58 views
0

我想測試一個休息API上傳本地文件到https網址。我目前正在使用curl來做到這一點。問題是我的curl中的POST被轉換爲PUT(http://curl.haxx.se/docs/manpage.html)中提到了相同。 從命令行測試我使用了以下內容:上傳本地文件使用php

捲曲-H「內容類型:應用程序/ JSON」 -H「授權:承載XXXXXXXXXXXXXXXYYYYYzzzzzz」 -H「接受版本:〜1」 - H 「除外:100繼續」 -H 「接受版本:〜1」 -T 「SomeFile.pdf的」 「https://abc-xyz.co/docs」

輸出:

{"code":"BadMethod","message":"/docs does not support PUT"} 

我的php代碼:

$url = '"https://abc-xyz.co/docs'; 
$filepath = '/Users/me/Documents/somefile.pdf'; //mac path 
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch, CURLOPT_HTTPHEADER, 
array('Authorization: Bearer XXXXXXXXXXXXXXXYYYYYzzzzzz', 'Accept-Version: ~1', 'Except: 100-continue'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLINFO_HEADER_OUT, true); 
$file = "@".$filepath; 
curl_setopt($ch, CURLOPT_POSTFIELDS,$file); 
$response = curl_exec($ch); 
if(!CURL_ERROR($ch)) 
    {  
    echo"\n The output is:".$response; 
    } 
else 
    { 
    echo "\nUpload failed ".curl_error($ch); 
    exit; 
    } 
curl_close($ch); 

輸出:我得到解析錯誤。

有一個人可以教育我的三件事:

  1. 我可以使用curl用於HTTPS做POST?如果是的話,怎麼樣?如果沒有,我的方法應該是什麼?
  2. 如何在我的PHP中傳遞文件路徑名?我嘗試了「@」。$ filepath,但它仍然不喜歡它。
  3. 如果我想限制我的文件上傳類型只有pdf應該使用MIME類型? (應用/ PDF ????)

謝謝, DR

回答

0

從命令行,看到post fileupload with curl

從PHP,看到the manual

完整數據的HTTP 「POST」 操作來發布。要發佈文件,請使用@和預先使用完整路徑。文件類型可以通過跟隨具有格式'; type = mimetype'格式的文件名來顯式指定。此參數可以作爲urlencoded字符串傳遞,如'para1 = val1 & para2 = val2 & ...'或作爲字段名稱作爲鍵和字段數據作爲值的數組。如果value是一個數組,則Content-Type頭將被設置爲multipart/form-data。從PHP 5.2.0開始,值必須是數組,如果文件通過傳遞給帶有@前綴的此選項。

curl_setopt($ch, CURLOPT_POSTFIELDS,array('someuploadname'=> "@".$filepath)); 
+0

謝謝你Wrikken。我會嘗試你所建議的。 – 38172

+0

我沒看curl後的文件上傳。提到,但問題是,我通過https發送文件,並從Curl的POST被轉換成我的服務器不支持的「PUT」。我想通過https使用POST上傳本地文件。 – 38172

+0

@ 38172:那麼我不能重現你的問題。在PHP中提到的數組只是_works在這裏(tm)_ ...並且看,超級用戶的curl回答也適用於這裏。你確定問題不在代理/接收方嗎? – Wrikken