From 8ed4812e00e6f6bb55a3ee6ab374a4642b135a62 Mon Sep 17 00:00:00 2001 From: logmanoriginal Date: Sun, 7 May 2017 13:17:43 +0200 Subject: [PATCH] [FacebookBridge] Add requester languages to HTTP header If no accepted languages are specified Facebook will guess your language. This guess can go horribly wrong if your server does not provide origin information. This adds a context header with language information when retrieving page contents. The accepted languages are read from the list of accepted languages specified by the web browser of the requester. References #530 --- bridges/FacebookBridge.php | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/bridges/FacebookBridge.php b/bridges/FacebookBridge.php index 1c8132b..71e5ed0 100644 --- a/bridges/FacebookBridge.php +++ b/bridges/FacebookBridge.php @@ -111,11 +111,23 @@ class FacebookBridge extends BridgeAbstract { //Retrieve page contents if(is_null($html)){ + $http_options = array( + 'http' => array( + 'method' => 'GET', + 'user_agent' => ini_get('user_agent'), + 'header' => 'Accept-Language: ' . getEnv('HTTP_ACCEPT_LANGUAGE') . "\r\n" + ) + ); + $context = stream_context_create($http_options); if(!strpos($this->getInput('u'), "/")){ - $html = getSimpleHTMLDOM(self::URI . urlencode($this->getInput('u')) . '?_fb_noscript=1') + $html = getSimpleHTMLDOM(self::URI . urlencode($this->getInput('u')) . '?_fb_noscript=1', + false, + $context) or returnServerError('No results for this query.'); } else { - $html = getSimpleHTMLDOM(self::URI . 'pages/' . $this->getInput('u') . '?_fb_noscript=1') + $html = getSimpleHTMLDOM(self::URI . 'pages/' . $this->getInput('u') . '?_fb_noscript=1', + false, + $context) or returnServerError('No results for this query.'); } }