Dane POST do adresu URL w PHP

96

Jak mogę wysłać dane POST na adres URL w PHP (bez formularza)?

Użyję go do wysłania zmiennej do wypełnienia i przesłania formularza.

Belgin Fish
źródło

Odpowiedzi:

198

Jeśli chcesz wysłać dane do adresu URL z samego kodu PHP (bez użycia formularza HTML), możesz to zrobić za pomocą curl. Będzie to wyglądać tak:

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

Spowoduje to wysłanie zmiennych postu do określonego adresu URL, a to, co strona zwróci, będzie w $ response.

Peter Anselmo
źródło
2
O ile twoje rozwiązanie jest poprawne, myślę, że OP chciał wiedzieć, jak to zrobić za pomocą formularza HTML. Chociaż pytanie nie było zbyt jasne.
Helen Neely,
Nie mogliśmy zrozumieć problemu, ale blokuje on program.
albatros
2
dbają, aby opracować co CURLOPT_FOLLOWLOCATION, CURLOPT_HEADERi CURLOPT_RETURNTRANSFERzrobić? Wolę nie kopiować kodu, którego nie do końca rozumiem.
Stefan Fabian
2
@Mike, chociaż to prawda, wolałbym mieć wszystko w odpowiedzi, aby było jasne od początku lub wyjaśnione w odpowiedzi, ponieważ ludzie zwykle przychodzą do przepełnienia stosów, aby uzyskać odpowiedź, aby nie otrzymywać więcej pytań.
Stefan Fabian,
1
@Stefan Czułem, że odpowiedź była całkowicie jasna ... odpowiedziała na pytanie. Jeśli twój poziom zrozumienia jest poniżej poziomu odpowiedzi, zrób więcej badań. Czy musi również wyjaśniać, że $urlma a, $ponieważ w php tak wskazuje się zmienną? Gdzie wyznaczasz granicę? „… nie dostać więcej pytań” nie jest postawą kogoś, kto odniesie sukces w samodzielnej nauce, zwłaszcza w programowaniu.
Mike,
75

bez cURL, którego można używać w 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);
Phd. Burak Öztürk
źródło
6
Funkcja file_get_contents jest często wyłączona na hostach stron trzecich, a cURL jest jedyną opcją
KryptoniteDove
3
@KryptoniteDove Wiem, że często jest wyłączony. W związku z tym, że na górze mojej odpowiedzi umieściłem "BEZKRĘTNY"
dr
10

Twoje pytanie nie jest szczególnie jasne, ale jeśli chcesz wysłać dane POST na adres URL bez korzystania z formularza, możesz użyć fsockopen lub curl.

Oto całkiem niezły opis obu

jfoucher
źródło