8/28/2554

โค้ด PHP ดึงข้อมูลจากเว็บอื่นด้วย CURL




ให้ลองหลับตาแล้วจินตนการให้เห็นหน้าเพจที่มีฟอร์มอยู่ฟอร์มหนึ่ง ลงมือป้อนข้อมูลลงไปในฟอร์ม กดปุ่ม submit
เบื้องหลัง เบราเซอร์จะเก็บรวบรวมข้อมูลภายในฟอร์ม สร้างขึ้นมาเป็นสตริงชุดหนึ่ง แล้วส่งไปให้กับไฟล์ที่ระบุไว้ใน target ของฟอร์ม (มันบ่ได้ส่งฟอร์มไปทั้งฟอร์มอย่างที่เราเห็นดอกนะ ส่งไปเฉพาะข้อมูลที่ถูกป้อนเท่านั้น) เมื่อไฟล์นั้นได้รับข้อมูลก็จะทำการประมวลผลตามคำสั่งที่อยู่ภายในไฟล์ ได้ผลลัพธ์อะไรเซิฟเวอร์ก็รวบรวมเป็นสตริงชุดหนึ่ง แล้วส่งกลับมาให้เบราเซอร์เจ้าของ เบราเซอร์ได้รับสตริงแล้วก็ประมวลผลแสดงออกมาเป็นหน้าเพจ
ถ้าเราต้องการทำระบบโพสต์ข้อมูลอัตโนมัติ คำตอบคือ CURL ไม่ใช่แต่เฉพาะโพสต์ฟอร์มแต่รวมไปถึงร้องขอหน้าเพจจากเซิฟเวอร์ ถ้าท่านงงๆ ให้จินตนาการง่ายๆว่าเป็นการอ่านไฟล์ข้ามเว็บไซต์ก็แล้วกัน
CURL เป็นไลบรารี่ที่อนุญาติให้เราเขียนว่าจะส่งตัวแปรอะไรไปให้ไฟล์ไหนที่เว็บไซ ต์ไหน response ที่ได้กลับมาคือผลลัพธ์ที่ถูกประมวลผลเรียบร้อยแล้ว

เราสามารถเขียนโค้ดให้โปรแกรมเราล้อกอินอัตโนมัติไปยังเว็บไซต์ไหนก็ได้ เพื่อเอาข้อมูลบางอย่าง บางคราเราก็ใช้ CURL ส่งข้อมูลเพื่อร้องขอข้อมูลจากเว็บไซต์ที่เขามีหน้าเว็บให้ป้อนข้อมูล (อัตโนมัติ ไม่ต้องใช้คนคอยป้อนข้อมูล)
ผมขออ้างอิงไปที่บทความ CURL หรือ คือคำตอบสุดท้ายสำหรับ http client application บน php เวลาผมเขียน CURL ไม่ถูกก็ได้อาศัยเว็บพี่เขา เว็บแห่งนี้เป็นเสมือนอาจารย์ที่สอน PHP เชิงลึก แก่ผมเลยทีเดียว ขอขอบคุณด้วยใจจริงครับ
สมาชิกที่ผ่านมาอ่านเจอบทความนี้ ถ้าอยากได้ความรู้แจ่มๆ แวะไปเลยครับ www.phpzealots.com รับรองไม่ผิดหวัง
โค้ดด้านล่างผมก้อปปี้มาจากเว็บพี่เขาครับ ( เพื่อให้บทความต่อเนื่อง ต้องขออนุญาติพี่ phpzelot.com ไว้ ณ ตรงนี้ด้วยนะครับ ) วิธีเขียน CURL

    $urlWithoutProtocol = "www.example.com:80/someServices";
    $request         = "";
    $isRequestHeader = false;
 
    $exHeaderInfoArr   = array();
    $exHeaderInfoArr[] = "Content-type: text/xml";
    $exHeaderInfoArr[] = "Authorization: "."Basic ".base64_encode("authen_user:authen_pwd");
 
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $urlWithoutProtocol);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
    curl_setopt($ch, CURLOPT_HEADER, (($isRequestHeader) ? 1 : 0));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    if( is_array($exHeaderInfo) && !empty($exHeaderInfo) )
    {
        curl_setopt($ch, CURLOPT_HTTPHEADER, $exHeaderInfo);
    }
    $response = curl_exec($ch);
    curl_close($ch);
 
    echo $response;
?>
โค้ดด้านล่างเป็นการเขียนแบบสั้นๆ อีกวิธีหนึ่ง ส่งตัวแปรแบบ Querystring ไปด้วย

$request = "format=csv&by=member&rs=hour&rk=productivity&rb=".$month_first_date."&re=".$cur_date = date('Y-m-d');
$urlWithoutProtocol = "www.rescuetime.com/anapi/data/?".$request ;
$isRequestHeader = FALSE;
 
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $urlWithoutProtocol);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$productivity = curl_exec($ch);
curl_close($ch);
?>
ถ้าเป็นเว็บไซต์ที่ใช้ https จะต้องเขียนอย่างนี้ครับ

$request = "format=csv&by=member&rs=hour&rk=productivity&rb=".$month_first_date."&re=".$cur_date = date('Y-m-d');
$urlWithoutProtocol = "https://www.rescuetime.com/anapi/data/?".$request ;
$isRequestHeader = FALSE;
 
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $urlWithoutProtocol);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$productivity = curl_exec($ch);
curl_close($ch);
?>
เพิ่มคำสั่งเข้ามาอีกคำสั่ง
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
ที่เว็บนี้ก็อธิบายวิธีการเขียนโค้ดล้อกอินอัตโนมัติเว็บไซต์ที่ถูก protact ไว้ ลองแวะไปดูครับ Using cURL in PHP to access HTTPS (SSL/TLS) protected sites

0 ความคิดเห็น:

แสดงความคิดเห็น