درخواستهای اینترنتی
در جالنو برای ایجاد درخواست های اینترنتی کلاس packages\base\http\Client
ایجاد شده است. این کلاس با استفاده از سایر کتابخانه ها میتواند یک درخواست اینترنتی POST و یا GET ایجاد کند.
در حال حاضر جالنو تنها از کتابخانه CURL برای ایجاد درخواست استفاده میکند; برای این منظور کلاس packages\base\http\CURL
ایجاد شده است.
نکته: استفاده از Client بجای استفاده مستقیم از کلاس CURL این امکان را به شما میدهد تا در هر زمان بدون تغییر در کد ها، کتابخانه ی جدیدی اضافه کرده و از آن پس از آن استفاده کنید.
معرفی کتابخانه CURL
برای دریافت محتوایات یک صفحه در php از روش ها و متدهای مختلفی مانند
file_get_contents("http://www.google.com")
استفاده میشود. اما گاها لازم است هنگام دریافت صفحه از کوکی ها استفاده شود یا اطلاعاتی به فرمی ارسال شود و یا عملیات احرازهویت انجام شود که برای انجام این دسته از عملیات در php کتابخانه CURL
ایجاد شده است.
ایجاد درخواست
برای ایجاد یک درخواست لازم است ابتدا شئ از کلاس packages\base\http\Client
ایجاد شود.
یک درخواست میتواند یکی از انواع get
یا post
باشد. به همین منظور در کلاس Client دو متد get و post ایجاد شده است که متناسب با نوع درخواست، متد مربوطه فراخوانی میشود.
متدهای get و post دو آرگومان ورو دی میگیرند. آرگومان اول آدرس URL که باید بصورت کامل وارد شود و آرگومان دوم آرایهای از تنظیمات درخواست میباشد.
خروجی متدها شئ از کلاس packages\base\http\Response
میباشد.
توجه : بهتر است زمان کار با کلاس Client از لاگ ها استفاده کنید، که در صورت نیاز بتوانید به راحتی برنامه را دیباگ کنید.
برای اطلاعات بیشتر به صفحه لاگها مراجعه کنید.
مثال
<?php
namespace packages\packagename\controllers;
use packages\base\{Controller, Log, Http};
class Main extends Controller {
public function getGoogle() {
$log = Log::getInstance();
$client = new Http\Client();
try {
$log->info("init client params");
$params = [
"timeout" => 10
];
$log->reply($params);
$log->info("send http request to get http://www.google.com");
$response = $client->get("http://www.google.com", $params);
echo $response->getbody();
} catch (Http\ClientException $e) {
echo "Error {$e->getResponse()->getStatusCode()} has occurred";
} catch (Http\ServerException $e) {
echo "Error {$e->getResponse()->getStatusCode()} has occurred";
}
}
}
در مثال فوق صفحه اول گوگل را گرفته و با فراخوانی متد getbody() که در کلاس Response تعریف شده است میتوانید آن را نمایش دهید. در صورتی که روند اجرا بدرستی پیش نرود و استثنا پرتاب شود کد وضعیت خطا را نمایش میدهد.
استثنا
هنگام ارسال درخواست ممکن است مشکلی در سمت سرور و یا کلاینت به وجود آید که روند اجرا بدرستی پیش نرود مشکلات بوجود آمده باعث پرتاب استثناهای packages\base\http\ServerException
یا packages\base\http\ClientException
میشود.
برای در خواست هایی که وضعیت آنها 4xx باشد استثنا ClientException و درخواستهایی که وضعیت آنها 5xx باشد استثنا ServerException پرتاب میشود.
در استسثناهای ClientException و ServerException دو متد getResponse()
, getRequest()
تعریف شده است که به ترتیب شئ از کلاس Response , Request بر میگردانند. با فراخوانی آنها روی شئ استثنا میتوانید به اطلاعات درخواست ارسال شده و پاسخ آن که باعث استثنا شده است مانند کد وضعیت خطا دسترسی داشته باشید.