2016-08-13 7 views
1

Ich war cURL für die Veröffentlichung von Daten auf eine API, aber habe beschlossen, zu Guzzle zu wechseln. Mit cURL würde ich das tunReplikation cURL Beitrag in Guzzle

$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); 

Dies ist, was ich gerade mit Guzzle versuche.

$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(); 

Das erste Problem, das ich bin vor ist, dass es die arguement 3 für Anforderung besagt, muss ein Array sein, und ich kann es eine Zeichenfolge bin vorbei. Das ist in Ordnung, aber wie kann ich dann meinen XML-Block senden? Außerdem denke ich, dass ich die Header falsch gesetzt habe?

Ich habe die Dokumentation durchgelesen und sehe, dass Parameter 3 ein Array sein muss, aber ich sehe nicht, wie man eine XML-Zeichenfolge posten kann.

Jeder Ratschlag geschätzt.

Dank

+0

'$ Client-> Anfrage ('POST', 'http: // was auch immer', ['body' => $ data]];' –

+0

Perfekt, danke. Als Antwort markieren und ich werde akzeptieren. Weißt du, wie ich die Header einstellen kann? # –

Antwort

3

Sie können ein Array mit dem 'Körper' param erstellen:

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

Lesen Sie mehr unter:

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

Header zu setzen, Sie so etwas wie zu tun

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

Lesen Sie mehr unter: http://docs.guzzlephp.org/en/latest/request-options.html#headers

+0

Ich habe etwas ähnliches versucht, aber ich bekomme Type error: Argument 1 an GuzzleHttp übergeben \ Client :: send() muss Schnittstelle implementieren Psr \ Http \ Nachricht \ RequestInterface –

+0

@kate_hudson Show the Code, den Sie versuchen. –

+0

Kein Problem, ich habe die Op. –