سه روش به منظور ایجاد درخواست POST در PHP
من کارهای زیادی با سرویس ها انجام می دهم و با آنها به طرق مختلف در PHP سر و کار دارم. چند روش محدود برای فراخوانی سرویس ها وجود داره که می تونیم از اونها استفاده کنیم. PHP دارای یک افزونه curl است که بسیار مفید است، و می تونیم با اضافه کردن افزونه های PECL قدرت بیشتری پیدا کنیم.
پست از طریق PHP curl
این یک روش سر راست و ساده است. در مثال زیر من یک متغیر به نام xml$ دارم که مقدار XML ی که جهت ارسال آماده کرده ام را نگهداری می کند. من قصد دارم محتوای آن را به متد تست flicker ارسال کنم.
$url = 'http://api.flickr.com/services/xmlrpc/'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch);
اول ما اتصال را مقداردهی میکنیم سپس از طریق متد ()setopt گزینه هایی را که لازم است مشخص میکنیم. این ها به PHP می گویند که ما در حال ساخت یک درخواست POST هستیم و اینکه ما قصد داریم تعدادی داده به همراه آن ارسال کنیم. نشانگر CURLOPT_RETURNTRANSFER به curl می گوید مقدار خروجی تابع curl_exec را به جای اینکه چاپ کند به ما بر گرداند. سپس ما فراخوانی را انجام می دهیم و اتصال را می بندیم نتیجه در متغیر response$ خواهد بود.
پست از طریق Pecl_Http
Pecl_Http دارای ۲ واسط است - یک واسط پروسه ای و یک واسط شی گرا، ما با اولی شروع میکنیم. این حتی از curl هم ساده تر است، در این جا اسکریپت مبشابه برای Pecl_Http ترجمه شده است:
$url = 'http://api.flickr.com/services/xmlrpc/'; $response = http_post_data($url, $xml);
این افزونه درای یک متد است که به صورت فشرده یک درخواست را پست می کند، البته این متد می تواند به طور اختیاری داده را نیز به همراه خود ارسال کند. خیلی ساده و آسان.
پست از طریق Pecl_Http : واسط شی گرا
در آخر بیاید ببینیم نسخه شی گرای افزونه چه طوری کار میکنه. دقیقا فراخوانی مشابه با ۲ مثال قبل، با این تفاوت که از واسط دیگری استفاده میکنیم. منظور حرفم رو با مثال زیر بیشتر توضیح میدم:
$url = 'http://api.flickr.com/services/xmlrpc/'; $request = new HTTPRequest($url, HTTP_METH_POST); $request->setRawPostData($xml); $request->send(); $response = $request->getResponseBody();
این مثال یه مقدار بلندتر از مثال قبلی است، و ممکنه شما فکر کنید این نشان دهنده این است که این روش پیچیده تر است. از جهاتی این درست است و شاید زیاد به درد مثال بی اهمیت ما نخوره. البته خیلی مهمه که به یاد داشته باشیم افزونه pecl_http به شدت منعطف و قدرتمند است و می تواند برخی موارد که افزونه curl نمیتواند را هندل کند. لذا اگرچه در این مثال یه مقدار پیچیده تر به نظر می رسد اما همچنان یک انتخاب عالی برای پیاده سازی است.
نتیجه گیری
در این مقاله مرور خیلی سریع روی سه روشی داشتیم که با استفاده از آنها یک فراخوانی وب سرویس در php می توانیم ایجاد کنیم-امیدوارم این مثال ها واضح باشند و به شما کمک کمک کنند.