瀏覽代碼

[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
logmanoriginal 7 年之前
父節點
當前提交
8ed4812e00
共有 1 個文件被更改,包括 14 次插入2 次删除
  1. 14 2
      bridges/FacebookBridge.php

+ 14 - 2
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.');
 			}
 		}