Asp.net 如何阅读外部页面';谁的头衔?

Asp.net 如何阅读外部页面';谁的头衔?,asp.net,jquery,external,title,Asp.net,Jquery,External,Title,我认为使用jQuery是可能的,但是任何ASP.NET服务器端代码都适合我的情况 使用jQuery,我可以将一个页面加载到一个div,并在div中筛选标记,但我认为对于重页面,先读取所有内容,然后读取title标记并不好。。 或者它有一个非常简单的解决方案?不管怎样,我在网上找不到关于那个的任何东西。 谢谢如果您将任何其他网页加载到您的网页中,只是为了阅读标题,则会存在安全风险。。。您应该使用服务器端脚本(asp.net、php等)完成这项工作,并将标题输出到您的网页。这是一种缓存,因为在每个请

我认为使用jQuery是可能的,但是任何ASP.NET服务器端代码都适合我的情况

使用jQuery,我可以将一个页面加载到一个div,并在div中筛选
标记,但我认为对于重页面,先读取所有内容,然后读取title标记并不好。。 或者它有一个非常简单的解决方案?不管怎样,我在网上找不到关于那个的任何东西。
谢谢

如果您将任何其他网页加载到您的网页中,只是为了阅读标题,则会存在安全风险。。。您应该使用服务器端脚本(asp.net、php等)完成这项工作,并将标题输出到您的网页。这是一种缓存,因为在每个请求中获取标题都是无缝的。

没有简单干净的方法来检索外部页面的标题。您可以在服务器端使用
WebClient
并解析响应

然而,这可能是值得审查的要求,它是否真的有必要,它将产生多少额外的流量和延迟。还可以考虑在外部站点上生成负载,这是不知道的,所有您想要的是标题,页面创建可能相当昂贵。

代码>字符串标题=正则表达式。匹配(new Studio.Net .WebCclipse)(DownloadString(URL),(@(.*)))[0 ]。组(1)。
string title=Regex.Match(new System.Net.WebClient().DownloadString(url),(@"<title>(.*?)</title>"))[0].Groups[1].ToString();

试试看。我不确定。

标题通常出现在前几百个字节内,因此您可以尝试对前1KB左右的范围请求进行解析(使用纠错解析器,因为某些结束标记将丢失),如果解析失败,则返回到加载整个页面。

我不确定是否所有服务器都支持此功能。
看,如果这有帮助的话


char[] data = new char[299];
System.Net.HttpWebRequest wr =(HttpWebRequest)WebRequest.Create("http://www.yahoo.com");
wr.AddRange("bytes", 0, 299);
HttpWebResponse wre = (HttpWebResponse)wr.GetResponse();
StreamReader sr = new StreamReader(wre.GetResponseStream());
sr.Read(data, 0, 299);
Console.WriteLine((data));
sr.Close();
编辑:尝试使用一些网络监控工具来检查服务器发送的文本。我使用fiddler查看输出并将其写入控制台

编辑2:我假设标题在这一页的开头。

几乎正确了

首先,将正则表达式更改为:
(?*?)

其次,您需要首先创建一个匹配对象(以防您的URI没有标题)

Match tMatch=new RegEx(@“(?*?)).Match(new System.Net.WebClient().DownloadString(url));
如果((空!=tMatch)&(tMatch.IsSuccess)){
//耶。
标题=t匹配组(“内容”)。值;
}

好的,多亏了cjjer和Boo,我刚刚读了更多关于regex的内容,下面的代码终于对我有用了

Dim qq As New System.Net.WebClient
    Dim theuri As New Uri(TextBox1.Text)
    Dim res As String = qq.DownloadString(theuri)
    Dim re As Regex = New Regex("<title\b[^>]*>(.*?)</title>", RegexOptions.Singleline)
    Dim ma As Match = re.Match(res)


    If Not ma Is Nothing And ma.Success Then
        Response.Write(ma.Groups(1).Value.ToString())
    Else
        Response.Write("error")
    End If
Dim qq作为新System.Net.WebClient
将Uri设置为新Uri(TextBox1.Text)
Dim res As String=qq.DownloadString(theuri)
Dim re As Regex=New Regex(“]*>(.*?”),RegexOptions.Singleline)
匹配时的尺寸ma=重新匹配(res)
如果不是的话,我什么都不是,我成功了
Response.Write(ma.Groups(1.Value.ToString())
其他的
响应。写入(“错误”)
如果结束
但无论如何,问题依然存在,这段代码正在下载整个页面并通过它查找,哪一个沉重的网站需要2到3秒才能完成,但就我所知,这似乎是唯一的方法:|
有什么建议可以改进这个代码吗?

在当前页面之外还是在站点之外?在站点之外,从另一个领域,这就是我所想的,但我可以找到一个解决方案,阅读一个用户作为链接给出的网站标题..是的,对,我要做的是,用户向应用程序提交其网站或fav链接后,应用程序可以读取标题并将带有标题的链接保存到数据库中,而不是强制用户为其网站编写“标题”字段。谢谢,它起了作用,但不可靠,它并不总是从您输入的url返回内容。。重定向、页面包含和ajax操作,使其中断..我对regex不太了解,它引发了以下错误:解析“(?*???”-无法识别的分组构造函数溢出。
Dim qq As New System.Net.WebClient
    Dim theuri As New Uri(TextBox1.Text)
    Dim res As String = qq.DownloadString(theuri)
    Dim re As Regex = New Regex("<title\b[^>]*>(.*?)</title>", RegexOptions.Singleline)
    Dim ma As Match = re.Match(res)


    If Not ma Is Nothing And ma.Success Then
        Response.Write(ma.Groups(1).Value.ToString())
    Else
        Response.Write("error")
    End If