Mat*_*one 41 .net c# regex http
使用WebClient类,我可以轻松地获得网站的标题:
WebClient x = new WebClient();
string source = x.DownloadString(s);
string title = Regex.Match(source,
@"\<title\b[^>]*\>\s*(?<Title>[\s\S]*?)\</title\>",
RegexOptions.IgnoreCase).Groups["Title"].Value;
Run Code Online (Sandbox Code Playgroud)
我想存储URL和页面标题.但是,当遵循以下链接时:
我显然想要将我重定向到的Url.
质询
有没有办法在WebClient课堂上这样做?
我怎么用HttpResponse和HttpRequest?
Wil*_*ean 66
如果我理解这个问题,那就比人们说的容易得多 - 如果你想让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;
}
}
Run Code Online (Sandbox Code Playgroud)
只需在使用WebClient的任何地方使用MyWebClient即可.在完成了您需要做的任何WebClient调用之后,您可以使用ResponseUri来获取实际重定向的URI. 如果您使用异步内容,则还需要为GetWebResponse(WebRequest请求,IAsyncResult结果)添加类似的覆盖.
Why*_*ous 16
我知道这已经是一个已经回答的问题了,但这对我很有用:
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);
Run Code Online (Sandbox Code Playgroud)
干杯.!;)
使用HttpWebRequest,您可以将AllowAutoRedirect属性设置为false.发生这种情况时,状态代码在300-399之间的任何响应都不会自动重定向.
然后,您可以从响应标头中获取新URL,然后为新URL创建新HttpWebRequest实例.
有了这个WebClient课程,我怀疑你可以开箱即用,所以它不允许重定向.你可以做的是从WebClient类派生一个类,然后重写GetWebRequest和GetWebResponse改变基实现返回的WebRequest/ WebResponse实例的方法; 如果是HttpWebRequest,则将AllowAutoRedirect属性设置为false.在响应中,如果状态代码在300-399范围内,则发出新请求.
但是,我不知道您可以从GetWebRequest/ GetWebResponsemethods中发出新请求,因此最好只使用HttpWebRequest/ 执行循环,HttpWebResponse直到遵循所有重定向.
| 归档时间: |
|
| 查看次数: |
61362 次 |
| 最近记录: |