การใช้ชีวิตแบบหลากหลาย: การใช้พร็อกซีเซิร์ฟเวอร์กับไลบรารีของไคลเอ็นต์ Google Data API

Jeff Fisher, ทีม Google Data API
มิถุนายน 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 กรณีการใช้งานพร็อกซีเซิร์ฟเวอร์และไลบรารีของไคลเอ็นต์อื่นๆ ที่ไม่ได้ครอบคลุมอยู่ในบทแนะนํานี้ สําหรับนักพัฒนาซอฟต์แวร์ที่ต้องการความช่วยเหลือเพิ่มเติม ขอแนะนําให้เข้าร่วมกลุ่มการสนับสนุนสาธารณะที่ลิงก์ไว้ด้านล่าง

ดูข้อมูลเพิ่มเติมเกี่ยวกับไลบรารีของไคลเอ็นต์ที่ใช้ในบทความนี้ได้ที่หน้าเว็บต่อไปนี้

แหล่งข้อมูลอื่นๆ