C# WebClient OpenRead url

4

我有一个程序,使用短链接(我使用了Google的url缩短器)获取页面。为了构建我的示例,我使用了来自在C#中使用WebClient,是否有一种方法可以获取被重定向后的站点的URL?的代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            MyWebClient client = new MyWebClient();
            client.OpenRead("http://tinyurl.com/345yj7x");            
            Uri uri = client.ResponseUri;            
            Console.WriteLine(uri.AbsoluteUri);
            Console.Read();
        }
    }

    class MyWebClient : WebClient
    {
        Uri _responseUri;

        public Uri ResponseUri
        {
            get { return _responseUri; }
        }

        protected override WebResponse GetWebResponse(WebRequest request)
        {
            WebResponse response = base.GetWebResponse(request);
            _responseUri = response.ResponseUri;
            return response;
        }
    }
}

我不明白一件事:当我执行 client.OpenRead("http://tinyurl.com/345yj7x"); 时,它是否会下载该URL指向的页面?如果这个方法下载了页面,我需要一些东西只获取URL,所以如果有一种方法只获取一些头信息或只获取URL,请告诉我。

2个回答

11

您可以使用 HEAD 请求仅获取标头,就像这样:

var request = WebRequest.Create(sourceUri);
request.Method = "HEAD";

var response = request.GetResponse();
if (response != null) {
    // You can now use response.Headers to get header info
}

1
现在目标已经实现。只需使用 response.ResponseUri 获取您的 URL - 在这种情况下它看起来是 "http://www.google.ro/search?sourceid=chrome&ie=UTF-8&q=c%23+webclient+tinyurl"。 - Reddog
在响应中添加“using”语句,否则连接将保持打开状态。 - Zunair

3
创建一个 HttpWebRequest,将AllowAutoRedirect属性设置为false,然后查看响应中的Location头。
var request = (HttpWebRequest) WebRequest.Create("http://tinyurl.com/345yj7x");
request.AllowAutoRedirect = false;
var response = request.GetResponse();
var location = response.Headers[HttpResponseHeader.Location];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接