رفتن به مطلب
جامعه‌ی برنامه‌نویسان مُدرن ایران
کامبیز اسدزاده

برقراری ارتباط سرور Http تحت sf::Http


پست های پیشنهاد شده

در کتابخانه‌ی SFML کلاس Http این امکان را فراهم می‌کند تا به راحتی بتوانید تحت روش‌های Post، Get و Head درخواست‌های مورد نظر را دریافت و ارسال کنید. توجه داشته باشید این کتابخانه تنها از مباحث ابتدائی پروتکل Http پشتیبانی می‌کند.

برای دسترسی و استفاده از این ویژگی کافی است سرآیند زیر را وارد کنید:

#include <SFML/Network.hpp>

سپس با فراخوانی فضای نام به صورت زیر، از کلاس مربوطه یک نمونه خواهیم ساخت:

sf::Http http;

به عنوان مثال کد زیر جهت آماده سازی برای ارسال به سمت سرور کافی است:

#include <SFML/Network.hpp>

sf::Http http;
http.setHost("http://www.iostream.ir/");

با توجه به نیاز‌های مربوط به این مبحث، ارسال مقادیر به یک صفحه و آدرس اینترنتی توسط Request و Response صورت می‌گیرد که جهت دسترسی به این ویژگی‌ها کافی است از کلاس‌ مربوطه به صورت زیر نمونه گرفته شود.

sf::Http::Request request;
request.setMethod(sf::Http::Request::Post);
request.setUri("/page.html");
request.setHttpVersion(1, 1); // HTTP 1.1
request.setField("From", "me");
request.setField("Content-Type", "application/x-www-form-urlencoded");
request.setBody("para1=value1&param2=value2");

sf::Http::Response response = http.sendRequest(request);

در کد فوق، روش درخواست از نوع Post و یا Get مشخص می‌شود که از متد setMethod جهت اعمال آن استفاده شده است. در ادامه مشخصه‌ی setUri صفحه و یا‌آدرسی را که قرار است اطلاعات به آن ارسال یا دریافت شود را مشخص می‌کند. نسخه‌ی پروتکل http با مشخصه‌ی setHttpVersion با مقادیر صحیح مقدار دهی می‌شود که در این مثال مقدار ۱ به عنوان پشتیبانی از پروتکل نسخه‌ی Http 1.1 تعیین شده است.

با توجه به ماهیت روش Post مقادیری که برای ارسال نیاز است را باید ارسال کنید، برخی از اطلاعات ارسالی مانند Content-Type و غیره توسط مشخصه‌ی setField مشخص می‌شود و همچنین مشخصه‌ی setBody پارامتر‌ها (ورودی‌هایی) که از طرف کاربر ارسال می‌شود را فراهم می‌کند.

در نهایت کلاس Response جهت دریافت و مدیریت داده‌های ارسالی از سمت سرور را مدیریت می‌کند که برای دسترسی و چاپ اطلاعات تحت آن به صورت زیر خواهد بود:

sf::Http::Response response = http.sendRequest(request);
std::cout << "status: " << response.getStatus() << std::endl;
std::cout << "HTTP version: " << response.getMajorHttpVersion() << "." << response.getMinorHttpVersion() << std::endl;
std::cout << "Content-Type header:" << response.getField("Content-Type") << std::endl;
std::cout << "body: " << response.getBody() << std::endl;

مثال فوق وضعیت، نسخه‌ی مرتبط با پروتکل مربوطه، مقدار Content-Type و همچنین اطلاعات ارسال شده در مشخصه‌ی body را چاپ خواهد کرد.

در ادامه مثال مشخصی را برای ارسال یک نظر را آورده‌ایم که به صورت زیر خواهد بود:

#include <SFML/Network.hpp>
#include <sstream>

void sendComment(const std::string &message, const std::string &username)
{
    // Prepare the request
    sf::Http::Request request("/comment.php", sf::Http::Request::Post);

    // Encode the parameters in the request body
    std::ostringstream stream;
    stream << "username=" << username << "&message=" << score;
    request.setBody(stream.str());

    // Send the request
    sf::Http http("http://www.iostream.ir/");
    sf::Http::Response response = http.sendRequest(request);

    // Check the status
    if (response.getStatus() == sf::Http::Response::Ok)
    {
        // Check the contents of the response
        std::cout << response.getBody() << std::endl;
    }
    else
    {
        std::cout << "Request failed" << std::endl;
    }
}

توجه داشته باشید که جهت بررسی وضعیت ارسالی از نمونه‌ی response متد getStatus را می‌توان با شمارنده‌های موجود در کلاس Response مورد ارزیابی قرار داد.

در نهایت در سمت سرور کد زیر می‌تواند مقادیر ارسال شده را دریافت و پاسخ دهد:

<?php
    $username = $_POST['username'];
    $message = $_POST['message'];
    
    if (write_to_database($username, $message))
    {
        echo "Your comment has been added!";
    }
    else
    {
        echo "failed to write your message to database...";
    }
?>

نکته: مثال‌های فوق صرفاً برای آشنایی با نحوه‌ی استفاده از ویژگی مربوطه در این کتابخانه است، بنابراین بسیار ساده و فاقد کد‌های امنیتی و سفارشی است.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
مهمان
این موضوع برای عدم ارسال قفل گردیده است.

  • کاربران آنلاین در این صفحه   0 کاربر

    هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.

×
×
  • جدید...