2016-02-09 54 views
0

使用Guzzle(版本3),我想在「原始」模式下指定POST請求的主體。我目前正在嘗試這種方式:使用Guzzle指定POST請求的原始內容

$guzzleRequest = $client->createRequest(
    'POST', 
    $uri, 
    null, 
    'un=one&deux=two' 
); 

但它是行不通的。如果我轉儲我的$guzzleRequest我可以看到postFields->data是空的。事後使用$guzzleRequest->setBody()並沒有幫助。

但是,如果我將主體指定爲['un'=>'one', 'deux'=>'two'],則它可按預期工作。

如何將請求正文指定爲'un=one&deux=two'

回答

0

首先,我強烈建議您升級到Guzzle 6,因爲Guzzle 3已被棄用和停用。

它已經很長一段時間,因爲我用狂飲3,但我相信你想要的以下內容:

$request = $client->post(
    $uri, 
    $header = [], 
    $params = [ 
     'un' => 'one', 
     'deux' => 'two', 
]); 

$response = $request->send(); 

狂飲會自動設置Content-Type頭。

更多信息可與Post Request Documentation

在回答您的評論:

$request = $client->post(
    $uri, 
    $headers = ['Content-Type' => 'application/x-www-form-urlencoded'], 
    EntityBody::fromString($urlencodedstring) 
) 

爲此,參考:EntityBody SourceRequestFactory::create()

+0

感謝肖恩,但是這並沒有回答我的問題。如果我使用'新的EntityBody('un = one&deux = two')',我會得到一個原始的urlencoded字符串,如''un = one&deux = two'' – marcv

+0

更新回覆評論 –

+0

「流必須是資源」錯誤。如果我使用'EntityBody :: factory('un = one&deux = two')',我沒有錯誤,但它不能解決我最初的問題,'$ request-> postFields-> data'中沒有任何顯示 – marcv