2013-05-30 3 views
0

Как использовать либо WebClient или HttpWebRequest, чтобы сделать две вещи:WebClient или HttpWebRequest для получения hrefs и URL

1) Say после загрузки ресурса в виде строки с помощью:

var result = x.DownloadString("http://randomsite.com); 

есть родственник url (также строка запроса):

<a href="/q?name=john&age=50">Click here to get your name and age</a> 

Как я могу щелкнуть по этой ссылке с помощью webclient? после первоначальной загрузки ресурса в результате. Я смог использовать htmlagilitypack, чтобы изолировать href, но теперь я хотел бы следовать ему в коде.

2) Если httpwebrequest не перенаправляет, а вместо этого загружает одну и ту же страницу с различными параметрами, как я могу использовать webclient для извлечения нового URL-адреса, который сгенерирован? т.е. если я называю

var result = x.DownloadString("http://randomsite.com); 

, но это на самом деле вызывает

http://randomsite.com/q?site=default 

Затем я хочу, чтобы получить вторую URL-адрес

Заранее спасибо

ответ

0

Вы можете построить URL из ссылки и ссылку, которую вы только что скачали:

Uri baseUri = new Uri("http://randomsite.com"); 
Uri myUri = new Uri(baseUri, "/q?name=john&age=50"); 

Console.WriteLine(myUri.ToString()); // gives you http://randomsite.com/q?name=john&age=50 

Это также работает, если вы используете Url с параметрами url.

Что касается второго вопроса, я думаю, вы имели в виду, что запрос был перенаправлен, и вы хотите, чтобы этот url вместо этого? Тогда самый простой способ сделать это - подклассом WebClient, описанным here.

Uri baseUri = new Uri("http://randomsite.com"); 
using(var client=new WebClient()) 
{ 
    var result = client.DownloadString(myUri); 
    //get href via HtmlAgilityPack... 
    Uri myUri = new Uri(baseUri, "/q?name=john&age=50"); 
    result = client.DownloadString(myUri); 
} 
+0

благодарит за ваш быстрый ответ. Второй ответ завершен, но для первого, можете ли вы показать, как я на самом деле смоделировал бы кнопку «» с помощью webclient или httpwebrequest? Спасибо –

+0

@JohnD добавил базовый пример – shriek

Смежные вопросы