Ich versuche, eine Datei über http POST mit PHP und curl zu senden.multipart/form-Daten csv Datei-Upload POST PHP curl
Ich hatte keine Probleme mit grundlegenden Feldern zu arbeiten, aber seit ich versucht habe, die Datei hochzuladen, habe ich immer noch kein Glück.
Vom Terminal ich leicht mit dem folgenden Befehl an der Arbeit kann:
curl --header 'Content-Type: multipart/form-data' --header 'auth-token: #.######.##.##########################' -F '[email protected]_csv.csv' -F 'command=import' -F 'parameters={"contact-list_code": "1", "separator": ",", "header": false, "file_columns": [{"Position":"0", "Field":"1", "Rule":"3"}, {"Position":"1", "Field":"14", "Rule":"3"} ] }' http://api.com/method
ich folgend in PHP versucht, mit:
$file = '@'.realpath(dirname(__FILE__) . '/exports/test_csv.csv');
$data = http_build_query(array(
"command" => "import",
"file" => $file,
"parameters" => array(
"contact-list_code" => "1",
"separator" => ",",
"header" => false,
"file_columns" => array(
array(
"Position" => "0",
"Field" => "1",
"Rule" => "3"
),
array(
"Position" => "1",
"Field" => "14",
"Rule" => "3"
)
)
)
));
$authToken = '#.######.##.##########################';
$serviceHandler = curl_init();
curl_setopt($serviceHandler, CURLOPT_URL, 'http://api.com/method');
$headers = array();
$headers[] = "Content-Type: multipart/form-data";
$headers[] = "Auth-Token: ".$authToken;
curl_setopt($serviceHandler, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($serviceHandler, CURLOPT_POST, TRUE);
curl_setopt($serviceHandler, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($serviceHandler, CURLOPT_POSTFIELDS, $data);
curl_setopt($serviceHandler, CURLOPT_HTTPHEADER, $headers);
print_r(json_decode(curl_exec($serviceHandler)));
Hier ist der Fehler, den ich erhielt: Error handling data from http request
Ich habe auch versucht, CURLFile
Klasse für die Datei anstelle der @
für die Datei, aber es gab mir die gleiche er ror.
Ich denke, es ist erwähnenswert, dass ich diesen Code in einem Wordpress-Plugin ausführen.
Ich frage mich, was falsch mit meinem PHP-Code ist seit der Curl-Shell-Befehl in Ordnung ist.
Vielen Dank.
Vielen Dank für die Antwort! Wie auch immer ich scheint, muss ich http_build_query oder json_encode verwenden, denn wenn ich es ohne es versuche, erhalte ich eine Fehlermeldung, dass das Format ungültig ist. –
Welche Antwort erhalten Sie, wenn Sie es vom Terminal aus starten? – miknik
Wenn ich es vom Terminal aus starte, funktioniert es einfach wie es sollte, die Datei wird hochgeladen und das war's, eine Erfolgsmeldung. Das Problem ist irgendwo in meinem PHP-Code. –