2014-09-03 19 views
5

Altre persone hanno già chiesto come farlo da perl, java, bash, ecc., Ma ho bisogno di farlo in PHP, e non vedo nessuna domanda già fatta riguardante specificamente (o con risposte per) PHP.Come posso effettuare una richiesta con entrambi i parametri GET e POST in PHP con cURL?

Il mio codice:

$ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    $result = curl_exec($ch); 

Questo non funziona. Il sito di destinazione ha print_r($_GET); print_r($_POST);, quindi quando esamino lo $result dovrei essere in grado di vedere i campi che vengono inviati. Tuttavia, l'array $ _POST è vuoto: vedo solo le variabili get. Se rimuovo la stringa di query ?... dall'URL $, l'array POST viene popolato correttamente. Ma ora non ho i parametri GET. Come faccio a fare questo?

Nel mio caso specifico, devo inviare troppi dati per adattarlo alla stringa di query, ma non posso inviarlo tutto come POST perché il sito a cui voglio inviare sta selezionando un gestore per i dati pubblicati basato su una variabile nella stringa GET. Posso provare ad averlo cambiato, ma idealmente mi piacerebbe poter inviare sia i dati get che post nella stessa query.

+0

http://hayageek.com/php-curl-post-get/ –

+1

Non è possibile eseguire un POST e un GET allo stesso tempo, tuttavia è possibile aggiungere alcuni parametri di querystring all'URL, ma per aggiungere POST vars, devi fare un POST. – randomizer

+0

@ParagTyagi Sì, questo è un tutorial di base molto bello, ma non affronta la mia domanda: come posso inviare GET e POST * allo stesso tempo *? – Benubird

risposta

9
# GET query goes in the URL you're hitting 
$ch = curl_init('http://example.com/script.php?query=parameter'); 
# POST fields go here. 
curl_setopt($ch, CURLOPT_POSTFIELDS, array('post' => 'parameter', 'values' => 'go here')); 

PHP per sé non avrebbe deciso di ignorare i parametri GET se viene eseguito un POST. Popolerà $ _GET indipendentemente dal tipo di verbo http utilizzato per caricare la pagina - se sono presenti parametri di query nell'URL, verranno inseriti in $ _GET.

Se non ricevi $ _POST e $ _GET con questo, allora qualcosa sta causando un reindirizzamento o altrimenti uccide qualcosa. per esempio. hai controllato $_SERVER['REQUEST_METHOD'] per vedere se il tuo codice è effettivamente in esecuzione come un POST? PHP non popolerà $ _POST se un post non è stato effettivamente eseguito. Potresti aver inviato un messaggio al server, ma ciò non significa che il tuo codice verrà effettivamente eseguito in un regime POST, ad es. un reindirizzamento mod_rewrite.

Poiché hai attivato FOLLOW_REDIRECT, stai semplicemente ASSUMANDO che stai effettivamente ricevendo un post quando il codice viene eseguito.

+0

Questo è quello che sto facendo, ma * non funziona *! Mi sto perdendo qualcosa? C'è qualche impostazione php.ini speciale di cui ho bisogno? – Benubird

+0

@Benubird No, non ci sono impostazioni speciali. Funziona così, e se non funziona, dovresti pubblicare il tuo codice. Da nessuna parte nel tuo codice mostri il tuo URL. Funziona sicuramente, quindi il tuo URL deve essere errato. – Brad

+0

@Brad Questo è il mio url: 'https: //ec2-54-225-37-120.compute-1.amazonaws.com/wordpress/? Wc-api = paddle_wc_payment_gateway' – Benubird

3

non so forse hai già ma il tuo $ url ha i parametri get desiderati? Come:

$url = "http://example.com/index.php?param1=value1&param2=value2"; 
+0

Sì, lo fa - come ho detto nella domanda, posso vedere sia i campi post o i campi get, ma non entrambi. – Benubird

+0

Questo non risponde alla domanda. – randomizer

+0

@randomizer Come non funziona? – Brad

Problemi correlati