12
votes

Comment puis-je transférer $ _Post avec php et curl?

Je reçois une demande postale sur mon script PHP et souhaitez transférer cet appel à un autre script à l'aide de la poste. Comment puis-je faire cela?

Je peux utiliser CURL si elle est requise pour cette action.


1 commentaires

Votre script PHP a-t-il besoin d'accéder à la réponse renvoyée du poste transféré?


4 Réponses :


13
votes

Peut-être: xxx

de curl_setopt :

Ceci peut être transmis comme une chaîne urlencode comme 'para1 = VAL1 & para2 = VAL2 & ...' ou comme tableau avec le nom de champ comme données de la clé et du champ en tant que valeur.

3 commentaires

Avez-vous essayé cela avant? Avec la version de CURL I UTILISE, cela enverra les champs dans "Multipart / Form-Data", pas un poste régulier.


Je ne l'ai jamais essayé auparavant, mais la documentation PHP fait un bon travail de documentation de la fonctionnalité.


C'est la réponse la plupart des temps. Toutefois, si vous avez des variables profondes passées dans le contenu post (par exemple, "... & var1 [var2] = val & ...") Il ne fonctionnera pas ( var1 sera transmis comme une matrice vide ). La réponse de ZZCoder ci-dessous (en utilisant http_build_query () ) est la réponse droite (complète).



13
votes

Faites cela,

curl_setopt($handle, CURLOPT_POSTFIELDS, http_build_query($_POST));


1 commentaires

Ceci a fait l'affaire! Merci. http_build_query () est nécessaire, sinon cela ne fonctionnera pas.



0
votes
<?php

    function executeCurl($arrOptions) {

        $mixCH = curl_init();

        foreach ($arrOptions as $strCurlOpt => $mixCurlOptValue) {
            curl_setopt($mixCH, $strCurlOpt, $mixCurlOptValue);
        }

        $mixResponse = curl_exec($mixCH);

        curl_close($mixCH);

        return $mixResponse;
    }

    // If need any HTTP authentication

    $username = 'http-auth-username';
    $password = 'http-auth-password';

    $requestType = 'POST'; // This can be PUT or POST

    // This can be $arrPostData = $_POST;
    $arrPostData = array(
        'key1'  => 'value-1-for-k1y-1',
        'key2'  => 'value-2-for-key-2',
        'key3'  => array(
                'key31'   => 'value-for-key-3-1',
                'key32'   => array(
                    'key321' => 'value-for-key321'
                )
        ),
        'key4'  => array(
            'key'   => 'value'
        )
    );

    // You can set your POST data
    $postData = http_build_query($arrPostData); // Raw PHP array

    $postData = json_encode($arrPostData); // ONLY use this when requesting JSON data

    $arrResponse = executeCurl(array(
        CURLOPT_URL => 'http://whatever-your-request-url.com/xyz/yii',
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPGET => true,
        CURLOPT_VERBOSE => true,
        CURLOPT_AUTOREFERER => true,
        CURLOPT_CUSTOMREQUEST => $requestType,
        CURLOPT_POSTFIELDS  => $postData,
        CURLOPT_HTTPHEADER  => array(
            "X-HTTP-Method-Override: " . $requestType,
            'Content-Type: application/json', // ONLY use this when request json data
        ),
        // If HTTP authentication is required , use the below lines
        CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
        CURLOPT_USERPWD  => $username. ':' . $password
    ));

0 commentaires

1
votes

Voici une demande de courbure entièrement fonctionnelle qui rétablie $ _post où vous souhaitez (sur la base de Réponse du codeur ZZ ) xxx


0 commentaires