J'essaie d'envoyer un fichier via http POST en utilisant PHP et curl.multipart/form-data Téléchargement de fichiers csv POST PHP curl
Je n'ai eu aucun problème à travailler avec les champs de base, mais depuis que j'ai essayé de télécharger le fichier, je n'ai toujours pas de chance.
A partir du terminal, je peux facilement l'obtenir pour travailler avec la commande suivante:
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
J'ai essayé d'utiliser les éléments suivants en php:
$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)));
est ici l'erreur reçue: Error handling data from http request
J'ai également essayé d'utiliser la classe CURLFile
pour le fichier au lieu du @
pour le fichier, mais il m'a donné le même er ror.
Je pense qu'il vaut la peine de mentionner que je cours ce code dans un plugin Wordpress.
Je me demande ce qui ne va pas avec mon code php puisque la commande curl shell est correcte.
Merci.
Merci pour la réponse! Cependant, il semble que je doive utiliser http_build_query ou json_encode parce que quand j'essaye sans cela, je reçois une erreur disant que le format n'est pas valide. –
Quelle réponse obtenez-vous lorsque vous l'exécutez à partir du terminal? – miknik
Lorsque je l'exécute à partir du terminal, il fonctionne comme il se doit, le fichier est téléchargé et c'est tout, un message de réussite. Le problème est dans mon code php quelque part. –