มิถุนายน 2007
บทนํา: ทําไมจึงต้องใช้พร็อกซี
พร็อกซีเซิร์ฟเวอร์คือคอมพิวเตอร์ (หรือบริการในคอมพิวเตอร์) ที่ส่งคําขอสําหรับคอมพิวเตอร์ไคลเอ็นต์จํานวนมากในนามของตน ซึ่งโดยทั่วไปจะเป็นทรัพยากรภายนอก บทความนี้เกี่ยวข้องกับพร็อกซีเซิร์ฟเวอร์ HTTP เนื่องจาก HTTP เป็นโปรโตคอลที่ใช้เข้าถึง API สาธารณะสําหรับบริการเว็บของ Google นอกจากนี้ ส่วนขยาย HTTPS หรือ SSL ยังมีประโยชน์ในการขอ HTTP ที่มีข้อมูลที่ละเอียดอ่อน เช่น ข้อมูลส่วนตัวหรือรหัสผ่านของผู้ใช้ บริษัทขนาดใหญ่จํานวนมากปัจจุบันใช้พร็อกซี HTTP เพื่อควบคุมข้อมูลที่พนักงานหรือพนักงานสามารถดูได้บนอินเทอร์เน็ต นอกจากนี้ ห้องสมุดสาธารณะและโรงเรียนยังเป็นที่ใช้งานพร็อกซีเพื่อวัตถุประสงค์นี้อีกด้วย นอกจากนี้ยังมีพร็อกซีเซิร์ฟเวอร์สาธารณะจํานวนมากที่ใช้เข้าถึงเนื้อหาเว็บแบบไม่ระบุตัวตนได้ด้วย
ปัญหาที่คุณอาจพบเมื่อใช้พร็อกซีเซิร์ฟเวอร์จะขึ้นอยู่กับซอฟต์แวร์ที่ใช้และการกําหนดค่า พร็อกซีจะถือว่ามี "ความโปร่งใส" หากพร็อกซีไม่ได้เปลี่ยนแปลงคําขอจากไคลเอ็นต์หรือการตอบสนองจากเซิร์ฟเวอร์ด้วยวิธีอื่นที่ไม่ใช่ที่จําเป็นสําหรับการระบุพร็อกซีและการตรวจสอบสิทธิ์ อย่างไรก็ตาม พร็อกซีเซิร์ฟเวอร์จํานวนมากอาจเปลี่ยนแปลงคําขอหรือการตอบกลับในลักษณะที่นักพัฒนาซอฟต์แวร์ควรรับทราบ โดยเฉพาะอย่างยิ่ง พร็อกซีบางอย่างที่จะแก้ไขประเภทเนื้อหาของการตอบกลับหรือตัดส่วนหัว HTTP แบบa-live ออกจากการรับส่งข้อมูลไปยังเซิร์ฟเวอร์ภายนอกที่โฮสต์ทรัพยากรนั้น
เหตุใดนักพัฒนาซอฟต์แวร์จึงต้องการใช้พร็อกซี HTTP หรือ SSL โดยทั่วไปแล้ว สาเหตุมี 2 ประการ ได้แก่ เป็นความจําเป็นต่อโครงสร้างพื้นฐานขององค์กรบางอย่าง หรือนักพัฒนาซอฟต์แวร์ต้องการแก้ไขข้อบกพร่องของแอปพลิเคชันที่ใช้บริการเว็บ เหตุผลแรกที่ไม่สามารถหลีกเลี่ยงได้ทั้งหมดหากกฎสําหรับเครือข่ายที่นักพัฒนาซอฟต์แวร์ทํางานอยู่ห้ามไม่ให้ใช้เว็บหรือการเชื่อมต่อ SSL กับเว็บไซต์ภายนอก สาเหตุรองมีการรายงานอยู่บ่อยครั้งในฟอรัมการสนับสนุนของเราโดยนักพัฒนาแอปที่พยายามแก้ปัญหาเมื่อจัดการกับบริการเว็บของ Google มีพร็อกซีการ "แก้ไขข้อบกพร่อง" สําหรับวัตถุประสงค์เฉพาะ เช่น Fiddler และ Charles ที่ออกแบบมาสําหรับสถานการณ์นี้โดยเฉพาะ สําหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้พร็อกซีเซิร์ฟเวอร์นี้ โปรดอ่านบทความ การใช้สาย: เครื่องมือสําหรับนักพัฒนา API
สําหรับแอปพลิเคชันบางอย่าง การเพิ่มการรองรับพร็อกซีเซิร์ฟเวอร์อาจทําได้ยาก ไลบรารีไลบรารีส่วนใหญ่สําหรับ Google Data API สร้างให้ทํางานร่วมกับพร็อกซีเซิร์ฟเวอร์ HTTP ได้หลังจากแก้ไขโค้ดเล็กน้อย บทความนี้เป็นจุดเริ่มต้นสําหรับนักพัฒนาแอปที่ต้องการใช้พร็อกซีเซิร์ฟเวอร์สําหรับคําขอเว็บที่แอปพลิเคชันสร้างขึ้น
Java
การใช้พร็อกซี HTTP กับไลบรารีของไคลเอ็นต์ Java ทําได้ง่ายด้วยการใช้พร็อพเพอร์ตี้ระบบของ Sun เพื่อจัดการการตั้งค่าการเชื่อมต่อ
เช่น หากพร็อกซีเซิร์ฟเวอร์ของบริษัทใช้ "my.Proxy.domain.com" ในพอร์ต 3128 คุณอาจเพิ่มโค้ดต่อไปนี้ลงในโค้ดก่อนที่จะสร้างออบเจ็กต์บริการของ Google ปฏิทิน, Google สเปรดชีต เป็นต้น
System.setProperty("http.proxyHost", "my.proxy.domain.com"); System.setProperty("http.proxyPort", "3128");
หรือทําเช่นนี้ในบรรทัดคําสั่งเมื่อเริ่มต้นสภาพแวดล้อมของบริการเซิร์ฟเวอร์
java -Dhttp.proxyHost=my.proxy.domain.com -Dhttp.proxyPort=3128
ด้วยแพ็กเกจ JSSE เวอร์ชันล่าสุดก็สามารถขยายไปยังพร็อกซี SSL ได้ด้วย หากพร็อกซีเซิร์ฟเวอร์เดียวกันในตัวอย่างก่อนหน้านี้เรียกใช้พร็อกซี SSL บนพอร์ต 3129 โค้ดที่จําเป็นจะมีลักษณะดังนี้
System.setProperty("https.proxyHost", "my.proxy.domain.com"); System.setProperty("https.proxyPort", "3129");
ซึ่งทําได้จากบรรทัดคําสั่งในลักษณะเดียวกับพร็อกซี HTTP
บางครั้งคุณอาจต้องระบุข้อมูลเข้าสู่ระบบให้กับพร็อกซีเซิร์ฟเวอร์เพื่อใช้งาน โดยทั่วไป ระบบจะส่งข้อมูลเหล่านี้โดยใช้แฮช Base64 ที่รวมอยู่ในส่วนหัว HTTP ดังนี้
String encoded = new String(Base64.encodeBase64(new String("username:password").getBytes())); String base64encodedCredentials = "Basic " + encoded; myService.getRequestFactory().setPrivateHeader("Proxy-Authorization", base64encodedCredentials);
โปรดทราบว่าโค้ดข้างต้นใช้แพ็กเกจ Apache Commons Codec ในการเข้ารหัสแบบ Base64 คุณจะต้องนําเข้าชั้นเรียน org.apache.commons.codec.binary.Base64
เพื่อเรียกใช้โค้ดข้างต้น
.NET
หากต้องการใช้พร็อกซี HTTP กับไลบรารีของไคลเอ็นต์ .NET จะไม่สําคัญเท่ากับไคลเอ็นต์ Java แต่จะทําได้ในลักษณะเดียวกันเมื่อสร้างออบเจ็กต์บริการสําหรับผลิตภัณฑ์หนึ่งๆ
ตัวอย่างเช่น เราอาจใช้พร็อกซีเพื่อโต้ตอบกับบริการ Google ปฏิทิน
using System.Net; CalendarService service = new CalendarService("CalendarSampleApp"); query.Uri = new Uri(calendarURI); GDataRequestFactory requestFactory = (GDataRequestFactory) service.RequestFactory; IWebProxy iProxy = WebRequest.DefaultWebProxy; WebProxy myProxy = new WebProxy(iProxy.GetProxy(query.Uri)); // potentially, setup credentials on the proxy here myProxy.Credentials = CredentialCache.DefaultCredentials; myProxy.UseDefaultCredentials = true; requestFactory.Proxy = myProxy;
การดําเนินการนี้จะตรวจหาพร็อกซีที่จําเป็นจากการตั้งค่าการเชื่อมต่ออินเทอร์เน็ต ซึ่งเป็นฟีเจอร์ที่ดีสําหรับไลบรารี .NET อย่างไรก็ตาม หากคุณไม่เชื่อถือพร็อกซีเพื่อให้ค้นพบพร็อกซีได้อย่างถูกต้อง คุณก็ยังตั้งค่าได้โดยเปลี่ยนโค้ดเป็น:
using System.Net; CalendarService service = new CalendarService("CalendarSampleApp"); GDataRequestFactory requestFactory = (GDataRequestFactory) service.RequestFactory; WebProxy myProxy = new WebProxy("http://my.proxy.example.com:3128/",true); // potentially, setup credentials on the proxy here myProxy.Credentials = CredentialCache.DefaultCredentials; myProxy.UseDefaultCredentials = true; requestFactory.Proxy = myProxy;
บทสรุป
บทความนี้อธิบายถึงวิธีทําให้ไลบรารีของไคลเอ็นต์ Google Data API บางรายการทํางานร่วมกับพร็อกซีเซิร์ฟเวอร์ HTTP นักพัฒนาซอฟต์แวร์ที่ทํางานอยู่เบื้องหลังพร็อกซีเซิร์ฟเวอร์ที่กําหนดโดยนโยบายเครือข่ายจะยังคงใช้ไลบรารีเหล่านี้ได้ นักพัฒนาซอฟต์แวร์สามารถใช้พร็อกซีเซิร์ฟเวอร์เพื่อช่วยแก้ไขข้อบกพร่องของโค้ด โดยกําหนดให้พร็อกซีเซิร์ฟเวอร์บันทึกเนื้อหาของคําขอ HTTP และการตอบกลับที่ส่งไปยังและจากบริการเว็บของ Google กรณีการใช้งานพร็อกซีเซิร์ฟเวอร์และไลบรารีของไคลเอ็นต์อื่นๆ ที่ไม่ได้ครอบคลุมอยู่ในบทแนะนํานี้ สําหรับนักพัฒนาซอฟต์แวร์ที่ต้องการความช่วยเหลือเพิ่มเติม ขอแนะนําให้เข้าร่วมกลุ่มการสนับสนุนสาธารณะที่ลิงก์ไว้ด้านล่าง
ดูข้อมูลเพิ่มเติมเกี่ยวกับไลบรารีของไคลเอ็นต์ที่ใช้ในบทความนี้ได้ที่หน้าเว็บต่อไปนี้
แหล่งข้อมูลอื่นๆ
- กลุ่มสนับสนุน Google Data API
- หน้า Objective-C บทแนะนํา wiki - พูดคุยสั้นๆ เกี่ยวกับข้อผิดพลาดในการตรวจจับจากพร็อกซีเซิร์ฟเวอร์และการตรวจสอบสิทธิ์ด้วยกล่องโต้ตอบของผู้ใช้