HTML

RobbeR tech és magánblogja

kontakt:RobbeR at RobbeR pont hu

Egyéb publikálások: Elte-IK blogja
saját weboldal: RobbeR.hu

Webisztán

Nincs megjeleníthető elem

Címkék

Indafotós képek

Friss topikok

Linkblog

Hogyan küldjünk PHP-ből POST kérést?

2008.06.30. 01:15 RobbeR

A címben szereplő kérdésre egy világhírű programozó hekker, Daniel Stenberg ad választ, aki szabadidejében library-ket programoz PHP-hez, illetve néha nagy unalmában firmware-ket hordozható lejátszókhoz.

Ő alkotta meg a cURL (Client URL) nevű library-t, ami alkalmas POST kérés küldésére futásidőben. A cucc nem mellesleg használható még https, ftp, gopher, telnet, dict, file, és ldap protokollokhoz is, de én most csak a POST kérést mutatnám be egy egyszerű példán levezetve.

Ha valaki esetleg ki akarja próbálni, érdemes localhoston kisérletezni, mert nem garantált, hogy egy tárhelyen (főleg ingyenesen) telepítve/engedélyezve van a cURL. Az én localhostom Apache 2.2-ből és PHP 5.1.2-ből áll, ezen működik az alábbiakban bemutatott példa, mert kipróbáltam (bár azt olvastam, hogy PHP 4.0.2-től minden PHP verzió tartalmazza).

Először is írnunk kell egy scriptet, ami értelmezi, és valahogy logolja a bejövő kéréseket. Erre én az alábbi receive.php file-t használtam:

<?php
if(!is_file("file.log"))
        touch("file.log",0777);
if($_REQUEST["valtozo"] == "érték")
{
    $fa = fopen("file.log","a");
    fputs($fa,"Sikeres ".$_SERVER["REQUEST_METHOD"]." kérés a következő időpontban: ".date("Y-m-d H:i",time())."\n",1024);
    fclose($fa);
}
?>

Ezen szerintem nincs mit magyarázni. Kipróbálhatjuk a működését, ha meghívjuk így paraméterezve: receive.php?valtozo=%E9rt%E9k  (URLENCODE szükséges, bár egy normális böngésző megcsinálja helyettünk).

Most nézzük a POST-oló scriptet:

<?php
$c = curl_init();
curl_setopt($c, CURLOPT_URL, 'http://localhost/CURL/receive.php');
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, 'valtozo=%E9rt%E9k');
curl_exec ($c);
curl_close ($c);
?>

A curl_init() függöny értelemszerűen inicializálja a cURL munkamenetet. Ennek van 1 paramétere, ami beállítja a CURLOPT_URL előre definiált konstans értékét, de ezt mi a következő lépésben tesszük meg. A következő 3 sor beállítja a kérés tulajdonságait a konstansok által, amiknek listáját itt megtalálhatjuk. Ezek után már csak lefuttatjuk a kérést, és a logfájlunkban meg fog jelenni az új sor.

A dologban az az igazán kafa, hogy a kérésre a fogadó file akár válaszolni is tud, méghozzá a teljes kimenetével. Ezt viszont csak akkor tudja megtenni, ha a send.php-t kiegészítjük kb így:

<?php
$c = curl_init();
curl_setopt($c, CURLOPT_URL, 'http://localhost/CURL/receive.php');
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, 'valtozo=%E9rt%E9k');
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
$return = curl_exec ($c);
curl_close ($c);
echo $return;
?>

Remélem hasznos volt az írás valakinek. Sok sikert!

 

 

Szólj hozzá!

Címkék: tech php post curl

-->

A bejegyzés trackback címe:

https://robber.blog.hu/api/trackback/id/tr18545393

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása