为什么Facebook发送按钮弹出窗口关闭?

时间:2012-12-17 16:05:16

标签: facebook web-scraping send

我们正在考虑允许用户通过几个不同的社交媒体网络共享链接。 Tweet,Pin it和LinkedIn分享按钮都有效,但我们遇到的问题围绕着Facebook发送按钮。

该按钮似乎正常加载,但点击它时会显示一条消息“无法访问www.website.com/page1.jsp?order_nbr=123456上的页面”。

在Facebook开发者网站上使用对象调试器时,会发生一些有趣的事情: 尝试调试www.website.com/page1.jsp?order_nbr=123456 scrape的响应代码是502错误(URL返回错误的HTTP响应代码)。 尝试调试www.website.com/page1.jsp我们得到200(正常响应)。 尝试调试m.website.com/page1.jspm.website.com/page1.jsp?order_nbr=123456,都会返回相同的502错误。

?之后的URL中有参数时似乎存在问题,但是我们想知道是否还需要设置其他内容,或者这可能是服务器配置问题

如果有关于Facebook如何擦除页面的技术说明,或者为什么他们的发送按钮可能会出现502错误,而上述其他按钮正在正常运行?任何见解将不胜感激。

以下是我们为了在移动网站上进行测试而将内容删除的简单代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://ogp.me/ns/fb#">

<head>
  <title>Testing - Order #123456</title>
  <link rel="shortcut icon" href="/favicon.ico" />
  <link rel="icon" href="/favicon.ico" />
  <link rel="apple-touch-icon" href="/icon.png" />
  <meta http-equiv="Content-Style-Type" content="text/css" />
  <meta name="viewport" content="width=device-width, user-scalable=yes" />
  <meta name="format-detection" content="telephone=no" />
  <link href="/css/test.css" rel="stylesheet" type="text/css" />
  <meta property="og:title" content="Test - Order #123456" />
  <meta property="og:type" content="website" />
  <meta property="og:url" content="http://m.website.com/page1.jsp?order_nbr=123456"/>
  <meta property="og:image" content="../../images/mobile_files/logo.png" />

 <!--asynchronous loader-->
 <script src="../../js/init.js" type="text/javascript"> </script>

</head>

<body>
      <DIV id="fb-root"></DIV>

  <DIV id="menu">
       <DIV style="float: left; padding:2px; "><fb:send ref="top_left_m" ></fb:send></DIV>  
       <DIV style="float: left; padding:2px;"><a href="https://twitter.com/share" class="twitter-share-button" data-count="none">Tweet</a> </DIV>
       <DIV style="float: left; padding:2px;"> <a data-pin-config="none" data-pin-do="buttonPin" href="//pinterest.com/pin/create/button/?url=http%3A%2F%2Fm.website.com%2Fjsp%2Forder.jsp%3Fjob_order_id%3D%3C%25%3DjobOrderId%25%3E&media=http%3A%2F%2Fm.website.com%2Fimages%2Fmobile_files%2Flogo.png&description=Testing..."><img src="//assets.pinterest.com/images/pidgets/pin_it_button.png" /></a> </DIV>
       <DIV style="float: left; padding:2px;"><script type="IN/Share"></script> </DIV>

       <DIV style="clear:both;"></DIV>
</DIV>  

</body>
</html>

更新:调试器的输出与前几天不同,我相信由于重新部署和/或缓存(服务器和/或本地)以前的测试,但仍有两个主要问题。
。#1 - 主要网站正在刮擦(返回代码200)。移动网站返回502并且不返回任何内容 。#2 - 如果我没有登录Facebook,会出现一个弹出窗口,要求我登录。一旦我这样做,窗口就会完全消失。如果我登录到Facebook,会弹出一个弹出窗口,然后完全消失 。#3 - URL中的参数已被排除为问题。

根据最大问题的性质(#2)......我要改变我的问题...... “为什么Facebook发送按钮弹出窗口关闭?”
(如果这个问题更合适,我会将#1分成一个单独的问题,但我认为将所有问题留在一个问题中可以最好地解决我的问题)

以防它是相关的,这是JS异步加载器:

(function(doc, script) {
     var js, 
     fjs = doc.getElementsByTagName(script)[0],
     add = function(url, id) {
     if (doc.getElementById(id)) {return;}
          js = doc.createElement(script);
          js.src = url;
          id && (js.id = id);
          fjs.parentNode.insertBefore(js, fjs);
     };
   // Facebook SDK
   add('//connect.facebook.net/en_US/all.js#xfbml=1', 'facebook-jssdk');
   // Pinterest
   add('http://assets.pinterest.com/js/pinit.js');
   // Twitter SDK 
   add('//platform.twitter.com/widgets.js', 'twitter-wjs');
   // LinkedIN
   add('//platform.linkedin.com/in.js');
}(document, 'script'));

1 个答案:

答案 0 :(得分:0)

问题在于Facebook发送范围请求作为请求的一部分。如果在范围(0-52K)内,则失败,但是大于此范围的页面刮得很好。似乎旧版本的Oracle在处理范围方面存在问题,因此您需要从请求标头中删除Facebook的范围请求。