แสดงบทความที่มีป้ายกำกับ curl แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ curl แสดงบทความทั้งหมด

วันศุกร์ที่ 19 สิงหาคม พ.ศ. 2559

cURL on SIS


คราวนี้ เรามาทดลอง curl บน ASP.NET กันบ้าง ซึ่ง .NET จะใช้การ Post Back และมี ViewState คอยช่วยในการเก็บ state ของหน้า Page ต่าง ๆ ทีนี้ เราจะต้องไป Get ค่า Parameter ต่าง ๆ ช่วยด้วยโดย ตัวอย่างนี้ จะเป็นการ Login ของ http://sis.phuket.psu.ac.th

Steps:  

ขั้นที่ 1 เรียกหน้า Login: https://sis-phuket1.psu.ac.th/WebRegist2005/Login.aspx โดยเข้าไป Get parameters ต่าง ๆ ให้ครบ

ขั้นที่ 2: Post User/Password ลงไปใน https://sis-phuket1.psu.ac.th/WebRegist2005/Login.aspx เพื่อทดลอง Login ผ่าน curl

Tools


1) Fiddler  เป็นโปรแกรมช่วย Parameter ต่าง ๆ ที่จำเป็น (คล้าย ๆ กับ Wireshark) แต่อันนี้ ออกแบบมาสำหรับ HTTP โดยเฉพาะ ใช้งานง่ายกว่า ถ้าไม่ใช้ Fiddler (หรือโปรแกรมช่วยอื่น ๆ) เราก็ต้องไป View source code แล้วก็ไปแกะเอาเอง ว่าหน้า Page จะส่งอะไรมาบ้าง (บางอย่างก็ถูก encode ใน javascript ด้วย) ซึ่งจะยุ่งยากกว่ามากสำหรับ Page ที่มีความซับซ้อน



2) Simple HTML Dom Parser  หลังจากที่ใช้ curl ดึงหน้า หลักมา การที่จะไป scrap เอาค่าใน page เพื่อให้ง่ายขึ้น ผมใช้ library ของ PHP Simple HTML Dom Parser เพื่อตัดค่าที่ีจะต้อง Post เข้าไปในระบบ (เช่น viewState)

ว่าแล้วก็สามารถทำตามตัวอย่างได้เลยครับ



Login ได้แล้วครับ (แต่ว่า รูปภาพ และ CSS ไม่แสดง เพราะ ไม่ได้เขียน curl ให้ download มาทั้งหมดนะครับ) ใครอยากลองปรับแต่งเขียนให้ download มาให้ครบ ๆ หรือ ตรวจสอบผลลัพธ์ว่า Login มาถูกต้องหรือไม่ หรือจะให้ Link ไปเมนูอื่น ๆ ทีนี้ ก็สามารถทำได้ไม่ยากแล้วครับ


Update: 19 ส.ค. 59

วันพฤหัสบดีที่ 18 สิงหาคม พ.ศ. 2559

cURL on LMS

ก่อนหน้านี้ ได้นำเสนอวิธีการใช้ cURL ในการดึงข้อมูลจาก Page หน้าแรกของ google.com เป็น method Get ง่าย ๆ แต่ถ้าเป็น method Post หากเราอยากทดลองทำหน้า Page เอง แล้ว ลอง Post ข้อมูลเองก็ได้เหมือนกัน เพราะ Web Page สมัยนี้ จะมีการ Setting ค่าตัวแปรต่าง ๆ มากมาย เช่น Referer, Origin, Cookie เป็นต้น เพื่อความปลอดภัยที่สูงขึ้น

แต่ถ้าเรา setup form page ด้วย PHP Build-in Web server เราจะไม่สามารถเรียกใช้งาน curl ได้ เพราะว่า PHP Build-in Web server นั้น ออกแบบมาเพื่อใช้ในการพัฒนาเป็นหลัก ทำงานเป็น Single Thread ดังนั้น ถ้า php เป็นเราไปเขียน curl ไปเรียก อีกหน้าที่อยู่ใน web server เดียวกัน ก็จะเกิดอาการค้าง หรือที่เรียกว่า "deadlock" เราต้องไปเขียนที่เครื่องหนึ่ง แล้ว ก็ Run อีกเครื่องหนึ่งแทน

ผมได้ทดลองเขียน script Post เพื่อ Login เข้าไปใน http://lms.phuket.psu.ac.th/ ของวิทยาเขต มีตัวอย่าง Code ดังนี้ครับ

ระหว่างที่ศูนย์คอมฯ ยังไม่มี REST API ให้เปิดใช้งานกันได้อย่างอิสระ เราก็ต้องหาวิธี Scrapping ไปก่อนครับ

Update: 18 ส.ค. 59