Nhìn chung: Sử dụng Máy chủ proxy với các Thư viện ứng dụng API của Google Data

Jeff Fisher, nhóm Google Data API
Tháng 6 năm 2007

Giới thiệu: Tại sao nên dùng proxy?

Máy chủ proxy là máy tính (hoặc dịch vụ trên máy tính) gửi yêu cầu cho một số máy khách thay mặt cho khách hàng, thường là với các tài nguyên bên ngoài. Bài viết này liên quan đến máy chủ proxy HTTP vì HTTP là giao thức dùng để truy cập API công khai cho các dịch vụ web của Google. Theo tiện ích, proxy HTTPS hoặc SSL cũng được quan tâm khi tạo các yêu cầu HTTP chứa thông tin nhạy cảm như dữ liệu riêng tư của người dùng hoặc mật khẩu. Ngày nay, nhiều công ty lớn sử dụng proxy HTTP để kiểm soát những trang web hoặc thông tin nhân viên có thể xem trên Internet. Các thư viện công cộng và trường học cũng được biết đến là nơi triển khai proxy cho mục đích này. Ngoài ra, một số máy chủ proxy có sẵn công khai có thể dùng để truy cập ẩn danh vào nội dung web.

Các vấn đề tiềm ẩn phải đối mặt khi sử dụng máy chủ proxy phụ thuộc vào phần mềm đang được sử dụng và cách phần mềm được định cấu hình. Một proxy được coi là "trong suốt" nếu proxy không thay đổi yêu cầu từ máy khách hoặc phản hồi từ máy chủ theo bất kỳ cách nào khác ngoài cách xác định và xác thực proxy. Tuy nhiên, một số lượng lớn máy chủ proxy sẽ thay đổi yêu cầu hoặc phản hồi theo cách mà nhà phát triển cần biết. Cụ thể, một số proxy sẽ thay đổi loại nội dung của phản hồi hoặc loại bỏ tiêu đề giữ lại HTTP khỏi máy chủ bên ngoài lưu trữ tài nguyên.

Vậy tại sao một nhà phát triển muốn sử dụng proxy HTTP hoặc SSL? Nhìn chung, có hai lý do dẫn đến việc này: bắt buộc phải có một số cơ sở hạ tầng công ty hoặc nhà phát triển muốn gỡ lỗi ứng dụng sử dụng dịch vụ web. Lý do đầu tiên là hoàn toàn không thể tránh khỏi nếu quy tắc cho mạng mà nhà phát triển đang thực hiện cấm việc kết nối web hoặc SSL không qua proxy với các trang web bên ngoài. Lý do sau này được các nhà phát triển thường xuyên báo cáo trong các diễn đàn hỗ trợ là khi họ cố gắng khắc phục vấn đề khi xử lý một dịch vụ web của Google. Có các proxy "gỡ lỗi" chuyên dụng như Fiddler Charles hướng đến tình huống chính xác này. Để biết thêm thông tin về việc sử dụng máy chủ proxy này, bạn nên đọc bài viết của chúng tôi Trên dây: Công cụ dành cho nhà phát triển API.

Đối với một số ứng dụng, việc thêm hỗ trợ máy chủ proxy có thể khó khăn. May mắn thay, hầu hết các thư viện ứng dụng cho API Dữ liệu của Google đều có thể hoạt động với máy chủ proxy HTTP sau một số sửa đổi nhỏ về mã. Bài viết này nhằm làm điểm khởi đầu cho một nhà phát triển muốn sử dụng máy chủ proxy cho các yêu cầu web mà ứng dụng của họ thực hiện.

Java

Dễ dàng sử dụng proxy HTTP với thư viện ứng dụng Java nhờ Sun sử dụng các thuộc tính hệ thống để quản lý chế độ cài đặt kết nối.

Ví dụ: nếu máy chủ proxy công ty của bạn đang chạy trên "my.Proxy.domain.com", trên cổng 3128, bạn có thể thêm đoạn mã sau vào mã của mình trước khi tạo đối tượng dịch vụ cho Lịch Google, Bảng tính Google, v.v.

System.setProperty("http.proxyHost", "my.proxy.domain.com");
System.setProperty("http.proxyPort", "3128");

Ngoài ra, bạn có thể thực hiện thao tác này trên dòng lệnh khi bắt đầu môi trường nhu cầu của bạn:

java -Dhttp.proxyHost=my.proxy.domain.com -Dhttp.proxyPort=3128

Với các phiên bản mới hơn của gói JSSE, gói này cũng có thể mở rộng cho các proxy SSL. Nếu cùng một máy chủ proxy trong ví dụ trước đang chạy proxy SSL trên cổng 3129, mã cần thiết sẽ là:

System.setProperty("https.proxyHost", "my.proxy.domain.com");
System.setProperty("https.proxyPort", "3129");

Bạn cũng có thể thực hiện việc này từ dòng lệnh theo cách tương tự như với proxy HTTP.

Đôi khi, bạn có thể cần phải cung cấp thông tin đăng nhập cho máy chủ proxy để sử dụng thông tin đó. Thông thường, bạn sẽ gửi các giá trị này bằng cách sử dụng hàm băm base64 trong tiêu đề HTTP như sau:

String encoded = new String(Base64.encodeBase64(new String("username:password").getBytes()));
String base64encodedCredentials = "Basic " + encoded;
myService.getRequestFactory().setPrivateHeader("Proxy-Authorization", base64encodedCredentials);

Xin lưu ý rằng mã trên sử dụng gói Apache Commons Codec để mã hoá base64 khi cần thiết. Bạn sẽ phải nhập lớp org.apache.commons.codec.binary.Base64 để chạy mã trên.

.NET

Để sử dụng proxy HTTP với thư viện ứng dụng .NET không quan trọng bằng ứng dụng Java, nhưng bạn có thể thực hiện việc này theo cách tương tự khi tạo đối tượng dịch vụ cho một sản phẩm cụ thể.

Ví dụ: chúng ta có thể sử dụng proxy để tương tác với dịch vụ Lịch 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;

Làm như vậy sẽ phát hiện proxy cần thiết từ cài đặt kết nối Internet của bạn--một tính năng tuyệt vời của thư viện .NET. Tuy nhiên, nếu bạn không tin tưởng để khám phá proxy đúng cách, bạn cũng có thể đặt proxy bằng cách thay đổi mã thành:

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;

Kết luận

Bài viết này đã thảo luận về cách để một số thư viện ứng dụng API Dữ liệu của Google hoạt động với máy chủ proxy HTTP. Các nhà phát triển làm việc sau máy chủ proxy bắt buộc phải tuân thủ chính sách mạng vẫn có thể sử dụng các thư viện này. Nhà phát triển cũng có thể sử dụng máy chủ proxy để giúp gỡ lỗi mã của họ bằng cách yêu cầu máy chủ proxy ghi lại nội dung của yêu cầu HTTP và phản hồi được gửi tới và từ một dịch vụ web của Google. Có nhiều trường hợp sử dụng nâng cao hơn về máy chủ proxy và các thư viện ứng dụng khác không có trong hướng dẫn này. Chúng tôi khuyến khích những nhà phát triển cần được trợ giúp thêm để tham gia vào các nhóm hỗ trợ công khai của chúng tôi theo đường liên kết dưới đây.

Để biết thêm thông tin về các thư viện ứng dụng được dùng trong bài viết này, hãy truy cập vào các trang sau:

Tài nguyên Khác: