HTTP و HTTPS دو پروتکل مهم در ارتباط با سرور هستند. در این درس به پروتکل ها و نحوه استفاده از آنها در فلاتر پرداخته شده است.
پروتکل HTTP: HTTP یا “Hypertext Transfer Protocol” یک پروتکل است که برای ارسال اطلاعات از وب سرور به مرورگر و برعکس، استفاده میشود. در این پروتکل، اطلاعات به صورت پیغامهایی به نام “request” و “response” ارسال میشود. برای ارسال request از متدهای مختلفی مانند GET، POST، PUT و DELETE استفاده میشود.
در فلاتر، برای ارسال درخواست HTTP از پکیج http
استفاده میشود. با استفاده از این پکیج، میتوانید درخواستهایی مانند GET و POST را برای ارتباط با سرور ارسال کنید و پاسخهای دریافتی را پردازش کنید. به طور مثال:
import 'package:http/http.dart' as http;
void main() async {
var response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/posts'));
print(response.statusCode);
print(response.body);
}
در مثال قبل یک درخواست GET به آدرس https://jsonplaceholder.typicode.com/posts
ارسال میشود و پاسخ دریافتی در خط دوم چاپ میشود. پکیج http
از async
و await
برای ارسال درخواستهایی که نیاز به انتظار برای دریافت پاسخ دارند، استفاده میکند.
پروتکل HTTPS: HTTPS یا “Hypertext Transfer Protocol Secure” نسخه امن شدهی پروتکل HTTP است. در این پروتکل، ارتباط بین سرور و مرورگر با استفاده از یک پروتکل امنسازی شده مانند SSL یا TLS برقرار میشود. با استفاده از HTTPS، اطلاعات بین مرورگر و سرور به صورت رمزگذاری شده ارسال میشوند و این اجازه میدهد که حریم خصوصی کاربر حفظ شود.
در فلاتر برای ارسال درخواست HTTPS از پکیج http
میتوانید استفاده کنید. برای این کار، باید یک شیء از نوع Client
با پارامتر https
بسازید. به طور مثال:
import 'package:http/http.dart' as http;
void main() async {
var url = Uri.parse('https://jsonplaceholder.typicode.com/posts');
var client = http.Client();
var response = await client.get(url);
print(response.statusCode);
print(response.body);
client.close();
}
در مثال قبل یک شیء از نوع http.Client
ساخته شده است و از آن برای ارسال درخواست HTTPS به آدرس https://jsonplaceholder.typicode.com/posts
استفاده شده است. پاسخ دریافتی نیز در خطوط سوم و چهارم چاپ میشود.
نکته: برای استفاده از HTTPS، باید از SSL اعتبار سنجی شده استفاده کنید. بهترین راه برای این کار استفاده از یک گواهینامه SSL معتبر است. معمولاً این گواهینامهها توسط سازمانهایی مانند Let’s Encrypt ارائه میشوند.
در اینجا یک مثال از ارسال درخواست HTTPS با گواهینامه SSL معتبر ارائه شده است:
import 'dart:io';
import 'package:http/http.dart' as http;
void main() async {
var url = Uri.parse('https://www.google.com');
var client = http.Client();
try {
var response = await client.get(url);
print(response.statusCode);
print(response.body);
} on SocketException catch (e) {
print("Error: $e");
}
client.close();
}
در مثال قبل یک شیء از نوع http.Client
ساخته شده و از آن برای ارسال درخواست HTTPS به آدرس https://www.google.com
استفاده شده است. این درخواست به دلیل اینکه گواهینامه SSL معتبری دارد، با موفقیت انجام میشود و پاسخ دریافتی چاپ میشود. اگر گواهینامه SSL معتبر نباشد، درخواست ارسالی با خطا مواجه خواهد شد.
همانطور که گفته شد HTTPS یک پروتکل امنیتی است و برای ارسال درخواست HTTPS باید از یک گواهینامه SSL معتبر استفاده کنید. برای استفاده از گواهینامههای SSL در فلاتر، میتوانید از پکیج dart:io
استفاده کنید. برای این کار، باید یک شیء از نوع SecurityContext
ساخته و گواهینامههای مورد نیاز را به آن اضافه کنید. به طور مثال:
import 'dart:io';
import 'package:http/http.dart' as http;
void main() async {
var url = Uri.parse('https://www.google.com');
var client = http.Client();
var context = SecurityContext();
context.setTrustedCertificates('path/to/certificate.pem');
client = http.Client(context: context);
try {
var response = await client.get(url);
print(response.statusCode);
print(response.body);
} on SocketException catch (e) {
print("Error: $e");
}
client.close();
}
در این مثال قبل ابتدا یک شیء از نوع http.Client
ساخته شده و به متغیر client
اختصاص داده شده است. سپس یک شیء از نوع SecurityContext
ساخته و گواهینامههای مورد نیاز برای اتصال به آدرس https://www.google.com
به آن اضافه شده است. در نهایت، یک شیء جدید از http.Client
با پارامتر context
برابر با context
ساخته شده و به متغیر client
اختصاص داده شده است. سپس درخواست HTTPS به آدرس https://www.google.com
با استفاده از شیء client
ارسال میشود.
در این مثال، گواهینامه SSL از یک فایل محلی به نام certificate.pem
بارگیری شده است. شما میتوانید گواهینامه SSL معتبر خود را به جای path/to/certificate.pem
قرار دهید.
توجه کنید که برای اضافه کردن گواهینامههای SSL به شیء SecurityContext
، میتوانید از دو متد setTrustedCertificates
و setClientAuthorities
استفاده کنید.
توجه کنید که برای اضافه کردن گواهینامههای SSL به شیء SecurityContext
، میتوانید از دو متد setTrustedCertificates
و setClientAuthorities
استفاده کنید. setTrustedCertificates
برای اضافه کردن گواهینامههای اعتماد مورد نیاز برای برقراری ارتباط SSL با یک سرور استفاده میشود. setClientAuthorities
هم برای اضافه کردن گواهینامههای اعتبارسنجی کاربر به یک SecurityContext
استفاده میشود.
در صورتی که قصد دارید با استفاده از یک گواهینامه SSL امنیتی، درخواست HTTPS را به یک سرور خود ارسال کنید، میتوانید از گواهینامههای SSL رایگانی مانند Let’s Encrypt که به راحتی در سی پنل فعال میشود استفاده کنید.