2016-08-13 23 views
1

私はcURLを使用してAPIにデータを投稿しましたが、Guzzleに切り替えることにしました。 cURLを使用すると、私はこれを行うでしょうGuzzleのcURL投稿を複製する

$data = 
"<Lead> 
    <Name>$newProject->projectName</Name> 
    <Description>$newProject->projectName</Description> 
    <EstimatedValue>$newProject->projectValue</EstimatedValue> 
</Lead>"; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "https://api.someurl.com/lead.api/add?apiKey=12345&accountKey=12345"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: text/xml', 
    'Content-Length: ' . strlen($data) 
)); 

$output = curl_exec($ch); 

これは私が現在Guzzleで試みていることです。

$data = "<Lead> 
      <Name>$campaign->campaignName</Name> 
      <Description>$campaign->campaignName</Description> 
      <EstimatedValue>$campaign->campaignValue</EstimatedValue> 
      </Lead>"; 

$client = new GuzzleHttp\Client(); 
$req = $client->request('POST', 'https://somurl', [ 
    'body' => $data, 
    'headers' => [ 
     'Content-Type' => 'text/xml', 
     'Content-Length' => strlen($data), 
    ] 
]); 
$res = $client->send($req); 
$output = $res->getBody()->getContents(); 

私が直面しています最初の問題は、それが要求配列にする必要がある、と私はそれを文字列を渡していますため、そのarguement 3を述べていることです。それは問題ありませんが、xmlブロックをどうやって送ることができますか?また、ヘッダーを正しく設定していない可能性があります。

私はドキュメントを読み、パラメータ3が配列である必要があることを確認しましたが、XML文字列を投稿する方法はわかりません。

アドバイスありがとうございます。

おかげ

+0

$ client-> request( 'POST'、 'http:// whatever'、['body' => $ data]); ' –

+0

パーフェクト、ありがとう。答えとしてマークし、私は受け入れます。 # –

答えて

3

あなたは '身体' のparamを使用してアレイを作成することができます。

$client->request('POST', 'http://whatever', ['body' => $data]); 

もっと読む時:

http://docs.guzzlephp.org/en/latest/quickstart.html?highlight=post#post-form-requests

ヘッダーを設定するには、次のような何かを行うことができます

$response = $client->request('POST', 'http://whatever', [ 
    'body' => $data, 
    'headers' => [ 
     'Content-Type' => 'text/xml', 
     'Content-Length' => strlen($data), 
    ] 
]); 
$output = $response->getBody()->getContents(); 

続きを読む:http://docs.guzzlephp.org/en/latest/request-options.html#headers

+0

GuessHttp \ Client :: send()に渡された引数1は、Psr \ Http \ Message \ RequestInterfaceインターフェイスを実装しなければなりません。タイプエラーが発生しました。 –

+0

@kate_hudsonあなたが試しているコード。 –

+0

問題はありません、私は操作を更新しました。 –

関連する問題