2012-11-28 16 views
6

Một cách khác để đặt câu hỏi này là: Làm thế nào để bạn mở rộng lập trình một liên kết TinyURL đến vị trí thực của nó?Làm thế nào để bạn tìm thấy một URL đúng trong C# thay vì liên kết chuyển tiếp?

Những gì tôi muốn làm là phải tìm một cách để lập trình lấy link:

http://www.baidu.com/link?url=mW91GJqjJ4zBBpC8yDF8xDhiqDSn1JZjFWsHhEoSNd85PkV8Xil7qccoOX3rynaE 

(mắt xích đầu tiên trong một tìm kiếm cho Jessica Alba sử dụng baidu.com) và có nó trở lại vào liên kết thực tế:

http://baike.baidu.com/view/270790.htm 

Đó chỉ là một ví dụ. Những gì tôi muốn làm là không cụ thể với Jessica nhưng để sử dụng Baidu.com như một phần của nhóm công cụ tìm kiếm của tôi trong dự án công cụ tìm kiếm meta của tôi.

Có thể có cách sử dụng lớp học WebBrowser nhưng tôi không thấy thành viên là URL.

Có thể có cách sử dụng WebRequestWebResponse.

Trả lời

2

Thực hiện yêu cầu gửi URL tin nhắn và phân tích cú pháp phản hồi HTTP Location tiêu đề.

1
string url = "http://www.baidu.com/link?url=mW91GJqjJ4zBBpC8yDF8xDhiqDSn1JZjFWsHhEoSNd85PkV8Xil7qccoOX3rynaE"; 
var req = (HttpWebRequest)HttpWebRequest.Create(url); 
req.AllowAutoRedirect = false; //<--!!!! 
var resp = req.GetResponse(); 
var realUrl = resp.Headers["Location"]; //http://baike.baidu.com/view/270790.htm 

PS: Điểm mấu chốt ở đây là req.AllowAutoRedirect = false

+1

này sẽ không hoạt động nếu có nhiều hơn 1 chuyển hướng. Nó sẽ chuyển đến URL1 -> Cố gắng chuyển hướng đến URL2 -> Thoát, trả về URL2. Điều gì sẽ xảy ra nếu URL2 chuyển hướng đến URL3? Giải pháp đúng là 'req.Method =" HEAD "', theo câu trả lời của tôi. –

2

Ở đây bạn đi, nó đẹp và dễ dàng!

var WReq = WebRequest.Create("http://www.baidu.com/link?url=mW91GJqjJ4zBBpC8yDF8xDhiqDSn1JZjFWsHhEoSNd85PkV8Xil7qccoOX3rynaE"); 
WReq.Method = "HEAD"; // Only download the headers, not the page content 
var ActualURL = WReq.GetResponse().ResponseUri.ToString(); 
MessageBox.Show(ActualURL); 

+0

Nhưng giải pháp này đọc cũng đọc trang thực tế 'http: // baike.baidu.com/view/270790.htm' không cần thiết. –

+0

Vì vậy, đưa ra 'MessageBox' ... nó chỉ có để chứng minh dễ dàng rằng nó hoạt động. –

+0

Danny nó không liên quan đến 'MessageBox'. Sử dụng Fiddler và xem kết quả. –

Các vấn đề liên quan