Dados POST para um URL em PHP

94

Como posso enviar dados POST para uma URL em PHP (sem um formulário)?

Vou usá-lo para enviar uma variável para preencher e enviar um formulário.

Peixe Belgin
fonte

Respostas:

193

Se você deseja postar dados em uma URL a partir do próprio código PHP (sem usar um formulário html), isso pode ser feito com curl. Isso parecerá assim:

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

Isso enviará as variáveis ​​de postagem para o url especificado, e o que a página retorna será em $ resposta.

Peter Anselmo
fonte
2
Por mais que sua solução seja correta, acho que o OP queria saber como fazer isso com formulário HTML. Embora a pergunta não fosse muito clara.
Helen Neely de
Não conseguimos entender o problema, mas bloqueia o programa.
albatross
2
o cuidado de elaborar o que CURLOPT_FOLLOWLOCATION, CURLOPT_HEADERe CURLOPT_RETURNTRANSFERfazer? Prefiro não copiar código que não entendo totalmente.
Stefan Fabian
1
@Mike, embora isso seja verdade, eu preferiria que tudo em uma resposta fosse claro desde o início ou explicado na resposta, porque as pessoas geralmente vêm para stackoverflow para obter uma resposta e não para obter mais perguntas.
Stefan Fabian
1
@Stefan Achei que a resposta era perfeitamente clara ... respondia à pergunta. Se o seu nível de compreensão estiver abaixo do nível da resposta, faça mais pesquisas. Ele também precisa explicar que $urltem um $porque no php é assim que você indica uma variável? Onde você desenha a linha? "... para não tirar mais dúvidas" não é a atitude de quem vai conseguir se autoaprender, principalmente em programação.
Mike,
75

cURL-less você pode usar no 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);
Burak Öztürk
fonte
6
file_get_contents é frequentemente desabilitado em hosts de terceiros e cURL é a única opção
KryptoniteDove
3
@KryptoniteDove Sei que costuma ser desativado. Devido a eu colocar uma linha no topo da minha resposta "CURLESS"
Burak Öztürk
10

Sua pergunta não é particularmente clara, mas no caso de você querer enviar dados POST para uma url sem usar um formulário, você pode usar fsockopen ou curl.

Aqui está um bom passo a passo de ambos

jfoucher
fonte