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

برقراری ارتباط سرور 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 کاربر

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

×
×
  • جدید...