【问题标题】:Detect facebook crawler within mvc/razor view在 mvc/razor 视图中检测 facebook 爬虫
【发布时间】:2017-05-29 18:21:46
【问题描述】:

我目前正在处理 facebook 共享,但似乎没有太多关于使用 C# 进行 facebook 共享的主题。想学点东西...

我在如下剃刀视图之一中有 Open Graph 元标记:

<head>
    <meta name="viewport" content="width=device-width" />
    <title>Hello World!</title>
    <meta property="fb:app_id" content="************" />
    <meta property="og:site_name" content="www.hello-world.com" />
    <meta property="og:type" content="website" />
    <meta property="og:url" content="http://hello-world.com/home/fbshare" />
    <meta property="og:title" content="How are you doing today?" />
    <meta property="og:description" content="Great to know you are doing fine." />
    <meta name="author" content="Hello" />
    <meta property="og:image" content="https://images.pexels.com/photos/2324/skyline-buildings-new-york-skyscrapers.jpg?w=940&h=650&auto=compress&cs=tinysrgb" />
    <meta property="og:image:type" content="image/jpeg" />
    <meta property="og:image:width" content="800" />
    <meta property="og:image:height" content="420" />
</head>

对于普通用户,我想将他们从这个视图重定向到其他地方,如下所示:

@{Response.Redirect("Somewhere in my application")};

但我也不想重定向 facebook scraper。无论如何我可以识别 facebook 或 facebook scraper 用户代理,如果我发现这是 facebook 用户代理,请不要将他重定向到其他任何地方,将它们从视图重定向到其他地方。

P.S:根据 facebook 官方文档,我必须找到 facebook 用户代理并允许他们抓取我的 Open Graph 元标记,但我无法挖掘。

Facebook 爬虫需要能够访问您的内容 正确地抓取和分享它。您的页面应该对 履带式。如果您需要登录或以其他方式限制访问您的 内容,您需要将我们的爬虫列入白名单。你也应该豁免 它来自 DDoS 保护机制。

如果在抓取时内容不可用,您可以强制 一旦它变得可用,通过将 URL 传递给 共享调试器。

可以通过以下任一用户代理字符串来识别 Facebook 爬虫:

facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php) 或者 facebookexternalhit/1.1

【问题讨论】:

    标签: asp.net-mvc facebook facebook-graph-api razor


    【解决方案1】:

    你试过了吗:

    var userAgent = HttpContext.Request.Headers["User-Agent"];
    if (userAgent != null && 
        userAgent.Contains("facebookexternalhit/"))
    {
        // Is a Facebook agent
    }
    else
    {
        // Is not a Facebook agent
    }
    

    当然,在 MVC 中,你永远不应该从 view 重定向,只能从 controllerfilter 重定向。

    【讨论】:

    • 不走运,它仍然将抓取工具重定向到我为重定向定义的操作。有什么想法吗?
    • 我根据here 更改了答案。用户代理字符串中的信息可能比从实际代理传递的信息更多。您应该设置代码以记录标题中的实际内容,以便您随后可以正确设置条件。
    • 我试图记录用户代理,但实际上它是空的。保存在其中的日志文本文件为空且不显示任何内容。可能是什么问题?
    • 您是否真的在使用 Facebook 爬虫对其进行测试?当然,如果是正常请求,则为空,这就是上面的 else 条件。您需要测试 Facebook 爬虫实际上做了什么,然后创建一个具有相同标头的请求以测试上述代码。
    • 对不起,这是因为权限问题。在我允许 facebook 在文件上写入后,我得到了这个 facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php) 用户代理。即使放置此用户代理也无济于事。它仍然重定向...傻我
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 2013-12-03
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    相关资源
    最近更新 更多