2016-07-11 20 views
3

Ich versuche, den folgenden Wert in eine API zu posten, und die Antwort zurück, es funktioniert gut mit Terminal Terminal mit Curl-Befehl, aber nicht auf meine PHP-Datei läuft auf localhost mit MAMP.Convert Terminal cURL nach PHP cURL Skript

{"userCode":"user478","imei":"39BB4E91-71E8-468D-9FDE-AA2222A93F04","deviceModel":"iPhone5,3","email":"[email protected]"} 

Hier ist meine PHP-Code, der nicht funktioniert:

function doRequest($method, $url) { 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_HEADER, 1); 
    curl_setopt($ch, CURLOPT_NOBODY, false); 
    curl_setopt($ch, CURLOPT_ENCODING, 'gzip', 'deflate'); 
    curl_setopt($ch, CURLOPT_USERAGENT, "CarteiraPagamento/1.0.3 (iPhone; iOS 9.3.2; Scale/2.00)"); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt($ch, CURLOPT_COOKIESESSION, true); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, getcwd().'/cookies/out.txt'); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, getcwd().'/cookies/out.txt'); 
    curl_setopt($ch, CURLOPT_REFERER, 'https://example.com/'); 
    curl_setopt($ch, CURLOPT_VERBOSE, 1); 
    if ($method == 'POST') { 
     curl_setopt($ch, CURLOPT_POST, 1);     
     curl_setopt($ch, CURLOPT_POSTFIELDS, '{"userCode":"user478","imei":"39BB4E91-71E8-468D-9FDE-AA2222A93F04","deviceModel":"iPhone5,3","email":"[email protected]"}');  
    } 

Wenn ich den curl Befehl auf Terminal laufen, ich habe die richtige Antwort zu bekommen.

curl -i -s -k -X 'POST' \ 
-H 'Content-Type: application/json; charset=utf-8' -H 'User-Agent: CarteiraPagamento/1.0.3 (iPhone; iOS 9.3.2; Scale/2.00)' \ 
--data-binary $'{\"userCode\":\"user478\",\"imei\":\"39BB4E91-71E8-468D-9FDE-AA2222A93F04\",\"deviceModel\":\"iPhone5,3\",\"email\":\"[email protected]\"}' \ 
'https://ws.example.com/example' 

Wie kann ich diesen Befehl konvertieren, um mit PHP Curl zu arbeiten?

+0

Was ist der Unterschied in der Ausgabe zwischen den beiden Methoden? – mulquin

+0

Wenn ich mit PHP Script versuche, bekomme ich: '{" errorCode ":" 1000 "," message ":" Anfrage kann nicht abgeschlossen werden. Bitte versuche es später noch einmal. "}' Aber wenn ich Terminal mit curl befehle Ich bekomme die richtige Antwort mit den Daten, die ich möchte. – Vinny

+0

Versuchen Sie 'curl_setopt ($ ch, CURLOPT_BINARYTRANSFER, true) hinzuzufügen;' –

Antwort

0

Es funktionierte nach dieser Zeile auf die cURL Zugabe:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=UTF-8')); 
0

Kopieren Sie Ihr Terminal Curl-Skript und importieren Sie es in Postman. Dann wandeln Sie es aus den Exportoptionen in PHP CURL um. Keine Notwendigkeit, manuell zu transformieren.

Ref -

  1. https://www.getpostman.com/docs/importing_curl
  2. How to export specific request to file using postman
+1

Ich bekomme immer diesen Fehler, wenn ich versuche, die cURL zu importieren. 'Fehler beim Importieren von" Curl: Zero "oder" Multiple "Optionen ohne Argumente. Nur eine wird unterstützt (die URL) ' – Vinny