C # WebClient OpenRead URL - PullRequest
       1

C # WebClient OpenRead URL

3 голосов
/ 22 декабря 2010

Итак, у меня есть эта программа, которая выбирает страницу по короткой ссылке (я использовал Google url shorterer).Для построения моего примера я использовал код из Используя WebClient в C #, есть ли способ получить 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 голосов
/ 22 декабря 2010

Вы можете получить заголовки только с помощью запроса 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 голос
/ 22 декабря 2010

Создайте HttpWebRequest со свойством AllowAutoRedirect , установленным в false, затем посмотрите на заголовок Расположение в ответе.

var request = (HttpWebRequest) WebRequest.Create("http://tinyurl.com/345yj7x");
request.AllowAutoRedirect = false;
var response = request.GetResponse();
var location = response.Headers[HttpResponseHeader.Location];
...