web-dev-qa-db-fra.com

Comment inclure des données de tableau dans CURLOPT_POSTFIELDS?

Je suis en train de traiter un formulaire HTML avec PHP puis de l'envoyer ailleurs pour le stockage et le traitement. Cependant, j'ai du mal à envoyer des listes de tableaux via curl. Je dois le faire dans un tel façon que quand il arrive sur le serveur de réception, c'est comme s'il venait directement du formulaire d'entrée.

Je ne reçois aucune erreur lors de l'utilisation de la fonction si je sérialise les tableaux, mais cela les rend illisibles par le serveur, ils doivent donc conserver le format de publication comme s'ils provenaient d'un formulaire HTML.

J'utilise Kohana mais les principes de Curl sont toujours les mêmes, voici mon code:

            $path = "/some/process/path";
            $store = "http://www.website.com";

            $url = $store . $path;

            $screenshots = array();
            $screenshots[0] = 'image1.jpg';
            $screenshots[1] = 'image2.jpg';
            $screenshots[2] = 'image3.jpg';

            $videoLinks = array();
            $videoLinks[0] = 'video1.wmv';
            $videoLinks[1] = 'video2.wmv';

            $params = array(
                'id' => '12',
                'field1' => 'field1text',
                'field2' => 'field2text',
                'field3' => 'field3text',
                'screenshots' => $screenshots,
                'videoLinks' => $videoLinks,
            );

            $options = array(
                CURLOPT_HTTPHEADER => array("Accept: application/json"),
                CURLOPT_TIMEOUT => 30,
                CURLOPT_POST => TRUE,
                CURLOPT_POSTFIELDS => $params,
            );

            $data = Remote::get($url, $options);
            $json = json_decode($data);

À votre santé.

21
diggersworld
CURLOPT_POSTFIELDS => http_build_query($params),

http://php.net/manual/en/function.http-build-query.php

53
delphist

Je voulais juste partager une alternative à http_build_query ()

Vous pouvez inclure des entrées de tableau avec CURLOPT_POSTFIELDS en fournissant chaque élément de sous-tableau séparément.

Au lieu de...

$videoLinks = array();
$videoLinks[0] = 'video1.wmv';
$videoLinks[1] = 'video2.wmv';

$params = array(
    ...
    'videoLinks' => $videoLinks;
    ...
);

... fais ça ...

$params = array(
    ...
    'videoLinks[0]' => 'video1.wmv';
    'videoLinks[1]' => 'video2.wmv';
    ...
);
6
klkl

Je suis nouveau sur cURL et sa version PHP version, mais pour autant que je sache, vous pouvez très bien faire des tableaux dans votre option, n'oubliez pas que si vous envoyez un tableau de field => values, vous devez définir l'en-tête Content-Type sur multipart/form-data pour une interprétation correcte. Cela étant dit, votre tableau de paramètres n'est pas formaté correctement. Vous avez cette virgule supplémentaire après la valeur finale de votre tableau. Cela peut être ce qui le rend bork.

1
Minion