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.