[PHP] Jak przesłać "ręcznie" metodą POST dane do skryptu przetwarzającego formularze?
Chcesz przesłać dane metodą POST do skryptu, bez korzystania z formularza.
O ile wysyłanie danych metodą GET jest stosunkowo proste, bo zmienne wystarczy dołączyć do adresu strony, to metoda POST działa zupełnie inaczej.
Metoda POST nie ma też ograniczeń w ilości przesłanych danych, co jest jej niewąpliwą zaletą i dlatego często służy ona do przesyłania danych z rozbudowanych formularzy do skryptów.
Aby przesłać do skryptu dane metodą POST nie trzeba jednak tworzyć formularza. Wystarczy odpowiednio spreparować nagłówki i przesłać zakodowane pary: zmienna=wartość. Zobacz jak to zrobić.
<?
$serwer = "www.jakisserwer.com";
$skrypt = "http://www.jakisserwer.com/katalog/skrypt.php";
$dane[] = "zmienna1=wartosc1";
$dane[] = "zmienna2=wartosc2";
$dane[] = "zmienna3=wartosc3";
for ($i=0;$i<count($dane);$i++) {
$p = explode("=",$dane[$i]);
$sciezka .= urlencode($p[0])."=".urlencode($p[1])."&";
}
$naglowek = "POST $skrypt HTTP/1.0\r\n";
$naglowek .= "Content-type: application/x-www-form-urlencoded\r\n";
$naglowek .= "Content-length: ".strlen($sciezka)."\r\n\r\n";
$f=fsockopen($serwer,80);
if ($f) {
fputs($f, "$naglowek$sciezka");
while (!feof($f)) echo fgets($f,1024);
fclose($f);
}
?>
Na początku trzeba zdefiniować nazwę serwera, na którym znajduje się skrypt i pełną ścieżkę do skryptu (URL). Następnie w tablicy $dane[] można umieścić wszystkie dane, które mają zostać przesłane do skryptu. Ważne jest aby umieścić znak równości pomiędzy zmienną i jej wartością.
Pętla for pobiera pary zmienna=wartość i przekształca je w zakodowany łańcuch znaków (kodowane są tylko znaki specjalne), gdzie każda para oddzielona jest symbolem &. Całość wyglšda podobnie jak w metodzie GET, z tym, że tutaj nie ma ograniczenia co do długości zmiennych.
Pozostało nam jeszcze przygotować nagłówek, również standardowy dla metody POST. Trzeba więc ustalić kodowanie (typ danych) jako x-www-form-urlencoded i określić długość przesyłanych danych, czyli Content-length.
Na koniec wystarczy przesłać dane do skryptu łącząc się z nim na porcie 80, czyli dokładnie tak samo jak przeglądarka. Niektóre serwery mogą korzystać z innych portów, więc wtedy trzeba numer 80 zmienić na właściwy port.
Jeżeli połączenie zostanie nawiązane skrypt przesyła dane. W pętli while() odczytywana jest zawartość strony i w skrypcie ma znaczenie informacyjne - ma sprawdzić jak przebiegła transmisja danych. W praktyce możesz usunąć ten zapis, jeżeli masz pewność, że skrypt działa poprawnie.