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

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

  1. If you need your ex-girlfriend or ex-boyfriend to come crawling back to you on their knees (no matter why you broke up) you need to watch this video
    right away...

    (VIDEO) Win your ex back with TEXT messages?

    ตอบลบ