POST datos a una URL en PHP

96

¿Cómo puedo enviar datos POST a una URL en PHP (sin un formulario)?

Lo usaré para enviar una variable para completar y enviar un formulario.

Pescado Belgin
fuente

Respuestas:

196

Si está buscando publicar datos en una URL desde el propio código PHP (sin usar un formulario html), puede hacerlo con curl. Se verá así:

$url = 'http://www.someurl.com';
$myvars = 'myvar1=' . $myvar1 . '&myvar2=' . $myvar2;

$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_POST, 1);
curl_setopt( $ch, CURLOPT_POSTFIELDS, $myvars);
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt( $ch, CURLOPT_HEADER, 0);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1);

$response = curl_exec( $ch );

Esto enviará las variables de publicación a la URL especificada y lo que devuelve la página en $ respuesta.

Peter Anselmo
fuente
2
En la medida en que su solución sea correcta, creo que el OP quería saber cómo hacerlo con el formulario HTML. Aunque la pregunta no estaba muy clara.
Helen Neely
No pudimos entender el problema pero bloquea el programa.
albatros
2
le importa elaborar qué CURLOPT_FOLLOWLOCATION, CURLOPT_HEADERy CURLOPT_RETURNTRANSFERhacer? Prefiero no copiar el código que no entiendo completamente.
Stefan Fabian
1
@Mike, si bien eso es cierto, preferiría que todo en una respuesta sea claro desde el principio o explicado en la respuesta porque la gente generalmente viene a stackoverflow en busca de una respuesta para no obtener más preguntas.
Stefan Fabian
1
@Stefan Sentí que la respuesta era perfectamente clara ... abordaba la pregunta. Si su nivel de comprensión está por debajo del nivel de la respuesta, investigue un poco más. ¿También necesita explicar que $urltiene un $porque en php así es como se indica una variable? ¿Dónde se traza la línea? "... no recibir más preguntas" no es la actitud de alguien que tendrá éxito en el autoaprendizaje, especialmente en la programación.
Mike
75

cURL-less que puedes usar en php5

$url = 'URL';
$data = array('field1' => 'value', 'field2' => 'value');
$options = array(
        'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
        'method'  => 'POST',
        'content' => http_build_query($data),
    )
);

$context  = stream_context_create($options);
$result = file_get_contents($url, false, $context);
var_dump($result);
Doctor. Burak Öztürk
fuente
6
file_get_contents a menudo está deshabilitado en hosts de terceros y cURL es la única opción
KryptoniteDove
3
@KryptoniteDove Sé que a menudo está deshabilitado. Debido a que puse una línea en la parte superior de mi respuesta "CURLESS"
Phd. Burak Öztürk
10

Su pregunta no es particularmente clara, pero en caso de que desee enviar datos POST a una URL sin usar un formulario, puede usar fsockopen o curl.

Aquí hay un tutorial bastante bueno de ambos

jfoucher
fuente