Giới thiệu:
Các trang deal hiện nay cung cấp deal không chỉ 1 nơi, mà giờ chúng mở rộng ra khắp nhiều nơi chẳng hạn như TPHCM, Hà Nội, Cần Thơ, hoặc Đà Nẵng.
Thay vì phải buộc thành viên chọn nơi ở của mình, để cho việc mua deal hay vouchor dễ dàng hơn, các website như nhommua, cungmua, hoặc hotdeal.... Sẽ tự động xác định location của thành viên từ địa chỉ IP mà họ vào site, còn nếu các IP đó không thuộc vào các địa điểm nói trên thì các web đó sẽ chuyển hướng user sang location mặc định.
Các bước thực hiện:
Việc các bạn cần làm là tìm ra cho bằng được 1 service để xác định location từ địa chỉ IP của thành viên, cũng có thể là free hoặc 1 database dạng *.dat đầy đủ.
Chú ý: Free service có thể thiếu thông tin và độ đáng tin cập sẽ không bằng 1 số service hoặc database IPToLocation.
Trong bài này mình sẽ hướng dẫn mọi người từng bưới để hoàn thành task này sử dụng: C#.Net, thư viện HttpClient và free service http://freegeoip.net/static/index.html
Để đơn giản mình sẽ sử dụng Console Application
Giới thiệu về lớp HttpClient
HttpClient là 1 HttpClient mới nhất dành cho .Net, Nó cung cấp API mở rộng để có thể truy xuất mọi thứ được truyền tải qua giao thức HTTP, HttpClient là 1 phần của WCF Web API preview 6 và bây giờ nó đã hiện hữu trong thư viện của ASP.NET Web API và trong .Net 4.5, bạn có thể tải nó về sử dụng NuGet, nhưng chúng ta chỉ sử dụng 3 gói sau đây trong ví dụ này:
1. System.Net.Http: Gói NuGet chính gồm lớp cơ bản HttpClient và các lớp liên quan
2. System.Net.Http.Formatting: Hỗ trợ serialization và deserialization và một số các tính năng xây dựng dựa trên System.Net.Http
3. System.Json: hỗ trợ kỹ thuật JsonValue cho việc đọc và sinh các tài liệu JSON.
HttpClient là lớp chính cho việc gửi và nhận HttpRequestMessages và HttpResponseMessages , nếu bạn đã từng sử dụng WebClient hoặc HttpWebRequest thì lớp HttpClient chẳng khác gì, và sau đây là 1 số tính năng nổi bật:
1. Khi 1 instance của HttpClient được tạo ra, chúng ta có thể bắt đầu cấu hình các extensions, set header mặc định, cancel outstanding requests và còn nhiều hơn nữa.
2. Bạn có thể tạo ra bao nhiêu request mà bạn muốn chỉ với 1 khởi tạo HttpClient duy nhất.
3. HttpClients không có gắn với bất kỳ Http máy chủ hay host nào, nên bạn có thể submit bất cứ request nào sử dụng cùng 1 khởi tạo HttpClient.
4. Bạn có thể kế thừa từ HttpClient để tạo ra client đặc biệt cho các site hoặc các mẫu đặc thù.
5. HttpClient sử dụng pattern hướng nhiệm vụ (Task-oriented) cho việc xử lý các request bất đồng bộ.
Bắt đầu với 1 simple console application:
Ở ví dụ này chúng ta sẽ request lên 1 free service để nhận về thông tin location based trên IP của client
using System; using System.Json; using System.Net.Http; namespace IPToLocation { /// <summary> /// Sample download list of location's properties from the Free GEO Ip Data sources at http://freegeoip.net /// </summary> internal class Program { private static string _address = "http://freegeoip.net/json/115.78.237.241"; private static void Main(string[] args) { // Create an HttpClient instance var client = new HttpClient(); // Send a request asynchronously continue when complete client.GetAsync(_address).ContinueWith((requestTask) => { // Get HTTP response from completed task. var response = requestTask.Result; // Check that response was successful or throw exception response.EnsureSuccessStatusCode(); response.Content.ReadAsAsync<JsonObject>().ContinueWith( (readTask) => { var city = readTask.Result["city"]; var regionCode = readTask.Result["region_code"]; var regionName = readTask.Result["region_name"]; var metroCode = readTask.Result["metrocode"]; var zipCode = readTask.Result["zipcode"]; var longitude = readTask.Result["longitude"]; var latitude = readTask.Result["latitude"]; var countryCode = readTask.Result["country_code"]; var ip = readTask.Result["ip"]; var countryName = readTask.Result["country_name"]; Console.WriteLine(city); }); }); Console.WriteLine("Press Enter to exit..."); Console.ReadLine(); } } }
HttpResponseMessage chứa tất cả các response bao gồm: status code, header, và bất kỳ nội dụng nào, Body hay còn gọi là nội dung được gói gọn trong HttpContent, nó chưa content header chẳng hạn như Content-Type, Content-Encoding….cũng như là nội dung thực của nó. Nội dung có thể được đọc với bất kỳ phương thức ReadAS* nào phụ thuộc vào việc bạn muốn sử dụng data như thế nào. Ví dụ trên chúng ta đọc Content dạng Json, rất dễ dàng cho việc chọn và lấy dữ liệu.
Thông tin thêm về HttpClienet các bạn xem ơn đây: http://blogs.msdn.com/b/henrikn/archive/2012/02/11/httpclient-is-here.aspx
http://support.microsoft.com/kb/2695606/vi-vn
http://code.msdn.microsoft.com/Introduction-to-HttpClient-4a2d9cee
HttpClientDemo.rar (699,27 kb)