การดาวน์โหลดหน้าเว็บ

C++:
การดาวน์โหลดหน้าเว็บ

วิธีการ:

ในเวอร์ชั่น C++ ปัจจุบัน, คุณสามารถใช้ CURL ไลบรารีเพื่อดาวน์โหลดเนื้อหาเว็บ. นี่คือตัวอย่างพื้นฐาน:

#include <curl/curl.h>
#include <iostream>
#include <string>

static size_t writeCallback(void* contents, size_t size, size_t nmemb, void* userp){
    ((std::string*)userp)->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl;
    CURLcode res;
    std::string readBuffer;

    curl = curl_easy_init();
    if(curl) {
        curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
        res = curl_easy_perform(curl);
        curl_easy_cleanup(curl);

        if(res == CURLE_OK) {
            std::cout << readBuffer << std::endl;
        }
        else {
            std::cerr << "CURL ผิดพลาด: " << curl_easy_strerror(res) << std::endl;
        }
    }

    return 0;
}

ตัวอย่างผลลัพธ์:

<!doctype html>
<html>
<head>
    <title>Example Domain</title>
    ...
</head>
<body>
    <div>
        <h1>Example Domain</h1>
        <p>โดเมนนี้ใช้สำหรับการใช้เป็นตัวอย่างในเอกสาร. คุณอาจใช้โดเมนนี้ ...</p>
    </div>
</body>
</html>

ศึกษาเพิ่มเติม

ในต้น, ไม่มีวิธีมาตรฐานในการดาวน์โหลดหน้าเว็บด้วย C++ เพียงอย่างเดียว. โปรแกรมเมอร์ใช้โซลูชันที่เฉพาะเจาะจงตามแพลตฟอร์มหรือไลบรารีของบุคคลที่สามที่หลากหลาย. ตอนนี้, libcurl เป็นไลบรารีที่ได้รับการสนับสนุนอย่างกว้างขวางและมีความยืดหยุ่นสูงสำหรับการถ่ายโอนข้อมูลด้วย URLs. ที่ถูกคอมไพล์และเชื่อมโยงกับโค้ด C++ ของคุณ, curl เป็นเครื่องมือที่ไปได้สุด.

ทางเลือกอื่นๆ ของ libcurl รวมถึง HTTPClientSession ของ Poco และ C++ Rest SDK (หรือที่รู้จักว่า Casablanca). ในขณะที่ libcurl เป็นที่พัฒนาบนฐานของ C และประมาณเท่าที่คุณสามารถไปได้ในระดับต่ำสุดเกี่ยวกับคำขอ HTTP, Poco และ Casablanca เสนออินเทอร์เฟซ C++ ที่เข้าใจง่ายกว่าซึ่งบางคนอาจชอบใช้.

ข้างใต้ฝา, เมื่อคุณดาวน์โหลดหน้าเว็บ, โปรโตคอล HTTP จะถูกกระตุ้น. คำขอ GET จะถูกส่งไปยังเซิร์ฟเวอร์, และถ้าทุกอย่างโอเค, เซิร์ฟเวอร์จะตอบกลับด้วยเนื้อหาที่ห่อหุ้มในคำตอบ HTTP.

ดูเพิ่มเติม