XMLHttpRequest доступ к Facebook разработчикам и графику - PullRequest
1 голос
/ 24 января 2012

У меня проблема с доступом к графику Facebook. Я использую скрипт Greasemonkey. Когда я использую тот же сценарий в Chrome Tampermonkey, он работает хорошо, и я могу получить данные.

В Firefox ничего не происходит, я думаю, возможно, это из-за междоменных ограничений. Я прав, и есть ли способ, которым это можно решить?

Забыл упомянуть, в Firefox работает только если я на graph.facebook.com.

редактирование:

var my_id = 1111111111;
var req = new XMLHttpRequest();
req.open('GET', 'https://graph.facebook.com/'+my_id, false); 
req.send();
var contents = req.responseText;
alert(contents);

Ответы [ 3 ]

0 голосов
/ 24 января 2012

XMLHttpRequest не поддерживает междоменные запросы.(Вы говорите, что это работает в Tampermonkey, хотя ??!? Tampermonkey поддерживает GM_xmlhttpRequest(), поэтому может расширил междоменный XHR до XMLHttpRequest(), возможно .)

Тем не менее, чтобы заставить это работать в Greasemonkey (и пользовательских скриптах Chrome, и Tampermonkey), вам нужно использовать GM_xmlhttpRequest() - который разрешает междоменные запросы.

Таким образом, код из вопроса будет выглядеть так:

var my_id = 1111111111;

GM_xmlhttpRequest ( {
    method:         'GET',
    url:            'https://graph.facebook.com/' + my_id,
    onload:         function (responseDetails) {
                        var contents = responseDetails.responseText;
                        alert (contents);
                    }
} );


Обратите внимание, что GM_xmlhttpRequest() работает асинхронно.(В нем несколько сложный синхронный режим, но это не рекомендуется.)

0 голосов
/ 20 июня 2012

Основано на наблюдениях График Facebook разрешает CORS , потому что когда я пытался его получить, мне возвращался статус 200 и заголовок имел Access-Control-Allow-Origin:* *

Использование Firebug:

Запрос:

xhr=new XMLHttpRequest();
xhr.open('get','https://graph.facebook.com/id',true);
xhr.send();

Заголовки:

Response Headers
Access-Control-Allow-Origin *
Cache-Control   private, no-cache, no-store, must-revalidate
Connection  keep-alive
Content-Length  181
Content-Type    text/javascript; charset=UTF-8
Date    Tue, 19 Jun 2012 22:41:46 GMT
Etag    "some random string"
Expires Sat, 01 Jan 2000 00:00:00 GMT
Pragma  no-cache
X-FB-Debug  some random string
X-FB-Rev    some random number

Request Headers
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Accept-Encoding gzip, deflate
Accept-Language en-us,en;q=0.5
Connection  keep-alive
DNT 1
Host    graph.facebook.com
Origin  http://localhost:8080
Referer http://localhost:8080/login
User-Agent  Mozilla/5.0 (X11; Linux x86_64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1
0 голосов
/ 24 января 2012

Если вы используете XMLHttpRequest для POST-информации, это, скорее всего, будет вызвано той же политикой происхождения ( MDN , Википедия ).

Если страница, на которой вы находитесь, не соответствует 1) домену протокола (http) 2) и 3) порту того места, куда вы отправляете информацию, тогда Firefox и другие, скорее всего, заблокируют запрос. (Вот почему это работает, только когда вы находитесь на graph.facebook.com.)

Поскольку Facebook вряд ли будет поддерживать совместное использование ресурсов общего доступа от вашего имени, вам, вероятно, не повезло.

Файлы cookie и другая «внешняя аутентификация» отправляются вместе с запросами POST, поэтому браузеры применяют этот тип политики по причине того, что букмарклет или сценарий Greasemonkey не могут отправлять ваши файлы cookie на сервер за доменом, который их выдал. вам.

...