¿Cómo puedo hacer una solicitud con los parámetros GET y POST en PHP con cURL?

Otras personas ya han preguntado cómo hacer esto desde perl, java, bash, etc., pero tengo que hacerlo en PHP, y no veo ninguna pregunta ya formulada específicamente sobre (o con respuestas para) PHP.

Mi código:

$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); 

Esto no funciona El sitio de destino tiene print_r($_GET); print_r($_POST); print_r($_GET); print_r($_POST); , entonces, cuando examine el $result , debería poder ver los campos que se envían. Sin embargo, la matriz $ _POST está vacía: solo veo las variables de obtención. Si elimino la cadena de consulta ?... de $ url, la matriz POST se llena correctamente. Pero ahora no tengo los parámetros GET. ¿Cómo hago esto?

Mi caso específico es que necesito enviar demasiados datos para que quepan en la cadena de consulta, pero no puedo enviarlo todo como POST porque el sitio al que quiero enviar es seleccionar un controlador para los datos publicados en función de una variable. en la cadena GET. Puedo intentar cambiar eso, pero idealmente me gustaría poder enviar datos de obtención y publicación en la misma consulta.

 # 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 mismo no decidiría ignorar los parámetros GET si se realiza una POST. Va a poblar $ _GET independientemente del tipo de verbo http que se utilizó para cargar la página. Si hay parámetros de consulta en la URL, irán a $ _GET.

Si no obtiene $ _POST y $ _GET con esto, entonces algo está causando un redireccionamiento o de lo contrario, matar a algo. por ejemplo, ¿has $_SERVER['REQUEST_METHOD'] para ver si tu código se está ejecutando realmente como un POST? PHP no completará $ _POST si una publicación no se realizó realmente. Es posible que haya enviado una publicación al servidor, pero eso no significa que su código se ejecutará en realidad bajo un régimen POST, por ejemplo, una redirección mod_rewrite.

Como tiene FOLLOW_REDIRECT activado, simplemente está ASUMIENDO que en realidad está recibiendo una publicación cuando se ejecuta su código.

No sé si quizás ya lo has hecho, pero ¿tu $ url tiene los parámetros de obtención deseados? Me gusta:

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