使用WebClient类,我可以轻松地获得网站的标题:
WebClient x = new WebClient(); string source = x.DownloadString(s); string title = Regex.Match(source, @"\]*\>\s*(? [\s\S]*?)\ ", RegexOptions.IgnoreCase).Groups["Title"].Value;
我想存储URL和页面标题.但是,当遵循以下链接时:
http://tinyurl.com/dbysxp
我显然想要将我重定向到的Url.
质询
有没有办法在WebClient
课堂上这样做?
我怎么用HttpResponse
和HttpRequest
?
如果我理解这个问题,那就比人们说的容易得多 - 如果你想让WebClient做所有请求的细节(包括重定向),但是最后得到实际的响应URI,你可以继承WebClient像这样:
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; } }
只需在使用WebClient的任何地方使用MyWebClient即可.在完成了您需要做的任何WebClient调用之后,您可以使用ResponseUri来获取实际重定向的URI. 如果您使用异步内容,则还需要为GetWebResponse(WebRequest请求,IAsyncResult结果)添加类似的覆盖.
我知道这已经是一个已经回答的问题了,但这对我很有用:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://tinyurl.com/dbysxp");
request.AllowAutoRedirect = false;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string redirUrl = response.Headers["Location"];
response.Close();
//Show the redirected url
MessageBox.Show("You're being redirected to: "+redirUrl);
干杯.!;)
使用HttpWebRequest
,您可以将AllowAutoRedirect
属性设置为false
.发生这种情况时,状态代码在300-399之间的任何响应都不会自动重定向.
然后,您可以从响应标头中获取新URL,然后为新URL创建新HttpWebRequest
实例.
有了这个WebClient
课程,我怀疑你可以开箱即用,所以它不允许重定向.你可以做的是从WebClient
类派生一个类,然后重写GetWebRequest
和GetWebResponse
改变基实现返回的WebRequest
/ WebResponse
实例的方法; 如果是HttpWebRequest
,则将AllowAutoRedirect
属性设置为false
.在响应中,如果状态代码在300-399范围内,则发出新请求.
但是,我不知道您可以从GetWebRequest
/ GetWebResponse
methods中发出新请求,因此最好只使用HttpWebRequest
/ 执行循环,HttpWebResponse
直到遵循所有重定向.