Gewusst wie: array von Argumenten, die cURL-Kommandozeile?
Bekam ich die gewünschte Antwort, wenn ich senden cURL bitte meine PHP Skript.
Meine Anforderung ist wie folgt.
$data = array ("[product[name]]" => "nw",
"[product[handle]]" => 150,
"[product[interval_unit]]" => "day",
"[product[interval]]" => 1,
"[product[price_in_cents]]" => 0,
"[product[initial_charge_in_cents]]" => 14200,
"[product[return_url]]" =>"http://mytrial.com/office/selfie/themes/adcampaign/56cee935-185c-4dfs-asdfa-2b6b0ae84a4d",
"[product[return_params]]" => "id={subscription_id}&customer_id={customer_id})");
$url="http://mytrial.com/office/selfie/themes/adcampaign/346423/products.json";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERPWD, 'sdfkjas2kjsd:x');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$res = curl_exec($ch);
curl_close($ch);
Es richtig funktioniert. Ich will die gleiche Anfrage in der Befehlszeile.Zuerst habe ich json-kodiertes array und ich habe versucht, mit diesem Befehle
curl -u sdfkjas2kjsd:x -H Accept:application/json -H Content-Type:application/json -x POST --data product[name]=nw&product[handle]=142&product[interval_unit]=day&product[interval]=1&product[price_in_cents]=0&product[initial_charge_in_cents]=14400&product[return_url]=http:\/\/54.145.218.63\/dev_lpad\/launchpad\/advertisers\/adcampaign\/56cee935-185c-4349-a8a1-2b6b0ae84a4d&product[return_params]={id={subscription_id}&customer_id={customer_id}} http://mytrial.com/office/selfie/themes/adcampaign/346423/products.json
Dann bekam ich den Fehler.
Error: Unable to parse request-body
Gibt es eine Möglichkeit, dieses Problem zu lösen?
UPDATE : Die URL hier ist ein dummy-Wert,Eigentlich bin ich versucht zu verbinden mit Chargify API (Recurring billing-Lösung ).
-H Content-Type:application/json
Warum haben Sie das gesagt?- weil ich bin versucht, senden Sie die json-Daten
product[name]=nw&product[handle]…
schauen nicht aus der Ferne wie JSON- Also, wie kann ich dies beheben?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheint es, dass Ihr server akzeptiert json-payload-post-Daten. Sie haben wahrscheinlich vergessen zu
json_decode
Ihre Daten, hier ist der fix:Wenn ich senden Sie es an mein php-Skript
<?php var_dump(json_decode(file_get_contents('php://input')));
ich sehe richtige Antwort:{"errors":["Name: cannot be blank.","Interval unit: must be 'month' or 'day'.","Recurring Interval: cannot be blank.","Price: cannot be blank. Enter '0' if free."]}
dies ist das outcurl
sendet jetzt korrekte json-Anforderung, aber es gibt einige Logik-Probleme. Ich kann annehmen, dass[product[name]]
sollte ersetzt werden, mitproduct[name]
im Befehl.{"product":{"name": ... "handle":...}}
. Ich habe aktualisiert die Antwort{"status":"500","error":"Internal Server Error"}
Dies ist die Letzte ausparse error
mit den korrekten json-Format. Wenn ich dir geholfen habe ein bisschen, bitte, bitte, bitte upvote zumindest.Endlich konnte ich lösen dieses Problem durch die Spaltung der array-Parameter. Meine cURL cummand ist diese.
Ich denke, Sie sollten Ihre Daten in einfachen Anführungszeichen
curl ... --Daten 'einige Daten hier' ...
EDIT:
ON WINDOWS
den richtigen Weg, um pass-array-argument über cURL ist unten dargestellt:Sehen die Verwendung von Komma getrennte Dateinamen, in denen der server erwarten
files
ein Array von Dateien.