2015-05-29 89 views
1

我正在使用Guzzle 6向第三方API(雲代理)發送多部分表單請求。 api需要2個參數「資源」和「應用程序」。 here是我正在撥打的電話的文檔。簡而言之,它將二進制文件部署到應用程序服務器。下面是我在Guzzle中使用的代碼。當嘗試發送空數組作爲「資源」參數的內容時,我收到「無效資源類型」錯誤。 Guzzle似乎只允許字符串在這裏? api要求在推送新的二進制文件時發送一個空數組。Guzzle在多部分請求中發送空數組

這裏是代碼:

$response = $this->client->put($this->baseUrl . "apps/7887990-654e-4516-8ce9-b37bc2f93a87/bits", [ 
     'multipart' => [ 
      [ 
       'name' => 'resources', 
       'contents' => [] 
      ], 
      [ 
       'name' => 'application', 
       'contents' => '@/tmp/cfdownloadYQfOp7', 
      ] 
     ] 
    ]); 

上述失敗,並提到的錯誤,並改變t 1至字符串導致一個壞的請求給API。

這裏是curl命令可以正常工作:

curl -k -X PUT -H "Authorization:token here" -F 'resources=[]' -F "[email protected]/tmp/cfdownloadF9AxlE" https://api.cloudfoundry.com/v2/apps/2d0f491b-d8dd-4b3a-96f9-58b3678e5dad/bits 

沒有人知道如何得到這個使用上述狂飲代碼工作?

+0

您是否嘗試引用括號?即'內容'=>'[]'' – patricus

+0

是的,我試過了,我只是找到了這個問題。我會提供一個答案 – arrowill12

回答

2

我已經解決了這個問題。事實證明,這不是一個發送數組的問題,而是另一個錯誤是由於掩蓋真正問題而引發的。

首先,我設定了調試,並關閉異常(見下文)。如果沒有關閉,Guzzle將掩蓋第三方的實際例外情況。我收到了400個錯誤的迴應,但它隱藏了真正的消息,那就是我試圖發送的文件無法解壓縮。然後我決定改變多部分請求以使用guzzle文檔中的'fopen'選項,而不是使用cloudfoundry文檔中的'@'。這解決了這個問題,現在一切正常。請參閱belwo以獲取更新的請求。

new Client(['debug'=>true,'exceptions'=>false,'headers' => ['Authorization' => "Bearer " . $token, "Accept" => "application/json"], 'verify' => false]) 

狂飲要求:

$response = $this->client->put($this->baseUrl . "apps/cb44bb975-654e-4516-8ce9-b37bc2f93a87/bits", [ 
     'multipart' => [ 
      [ 
       'name' => 'resources', 
       'contents' => '[]' 
      ], 
      [ 
       'name' => 'application', 
       'contents' => fopen('/tmp/cfdownloadYQfOp7', 'r') 
      ] 
     ] 
    ]);