2017-06-09 1 views
0

J'essaye de télécharger un fichier AND json data dans une requête curl en PHP. La requête fonctionne correctement avec curl dans la ligne de commande. Ceci est la demande boucle dans la ligne de commande:envoyer un fichier et des données json dans une requête php curl multipart/form-data

curl -v --basic -u'username' -F file="@documentTest.pdf;type=application/octet-stream" -F data='{"nomDocument":"test.pdf","externalid":"123456"};type=application/json' https://server.com/api/sendDocument 

L'en-tête est défini sur multipart/form-data et je voudrais pour définir le type MIME pour chaque élément envoyé dans la demande: application/octet-stream pour le fichier AND application/json pour les données json.

Ceci est mon code PHP

$dataJson = '{"nomDocument":"test.pdf","externalid":"123456"}'; 

$header = array('Authorization: Basic c2fghEfgfhVDZkOWxfghfghfgUy', 'Content-Type: multipart/form-data'); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_VERBOSE, true); 
curl_setopt(
    $ch, CURLOPT_POSTFIELDS, array(
     'file' => new \CurlFile(realpath('documentTest.pdf'), 'application/octet-stream', 'test.pdf'), 
     'data' => $dataJson 
    ) 
); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_URL, 'https://server.com/api/sendDocument'); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // false for https 
$page_content = curl_exec($ch); 
curl_close($ch); 

Comment mettre en application/JSON pour les données dans le CURLOPT_POSTFIELDS?

Merci.

Répondre

0

Vous devez utiliser

curl_setopt($ch, CURLOPT_HTTPHEADER, array(                  
    'Content-Type: application/json',                     
    'Content-Length: ' . strlen($data_string)) 
); 

où data_string de $ est la variable JSON que vous souhaitez envoyer. Vous pouvez trouver un détail à propos de json post dans php curl dans https://lornajane.net/posts/2011/posting-json-data-with-php-curl

+0

Merci Sinha, en effet, il semble que les données json sont maintenant envoyées dans le corps de la demande. Mais j'ai toujours un problème. La demande doit renvoyer un document PDF. Dans la ligne de commande, j'utilise l'option -o ouputfile.pdf et je peux récupérer le document. En PHP, $ page_content reste vide et je ne sais pas comment obtenir le PDF ... Avez-vous une idée? – jeje