Полезная информация

Общайтесь со знакомыми и друзьями в нашей группе в Контакте.
  • Форумы
  •  » Разработка
  •  » Подсунуть http-запросу контент без выполнения самого запроса к серверу

№104-03-2010 14:31:18

pan
Участник
 
Группа: Members
Зарегистрирован: 04-03-2010
Сообщений: 3
UA: Chrome 5.0

Подсунуть http-запросу контент без выполнения самого запроса к серверу

Всем доброго дня.

Имеется задача:
1. Отслеживать особо помеченные XHR-запросы (например, у которых есть определенный заголовок или специальное ключевое слово в URL'е) и перехватывать их до выполнения самого запроса (до открытия chanell'а)
2. Перехваченные запросы не пускать к самому серверу, но при этом не стопить их, а эмулировать успешное выполнение
3. Подсовывать заранее сгенерированный контент, доступный по nsIFile (локальный текстовик), в виде ответа от сервера.

Собственно, с пунктом 1 я справился без особых проблем. Вот пункты 2 и 3 увели меня в дебри. :)

Здорово помогла статья http://www.gamerotor.com/node/212 и листинг, указанный в ней. Однако у меня вариант copy-paste не прокатил, т.к. едва я вернул из метода newChannel() результат вызова ioServices.newChannel("file://myfile", null, null), то получил security alert. Этого, конечно, стоило ожидать.

И вот на этом этапе - затык... куда копать дальше? Я попробовал такой вариант:

Выделить код

Код:

newChannel: function(locationURI) {
...
    var iFile = функцияВозвращающаяNSIFILE(); // указывает на txt

    var istream = CC["@mozilla.org/network/file-input-stream;1"].createInstance(CI.nsIFileInputStream);

    // open for reading
    istream.init(iFile, 0x01, 0444, 0);

    var channel = CC["@mozilla.org/network/input-stream-channel;1"]
                        .createInstance(CI.nsIInputStreamChannel);
                        
    channel.setURI(locationURI);
    channel.contentStream = istream;
         
    if (channel) {
        return channel;
    }
...

Работает нормально, но такое впечатление, что firefox не понимает, что именно ему подсовывают. Текстовый файл содержит JSON (в ходе экспериментов в него были добавлены заголовки ответа HTTP-сервера).

HTTP/1.1 200 Ok
Date: Thu, 04 Mar 2010 10:52:07 GMT
Server: Apache/2.2.12 (Ubuntu) PHP/5.2.10-2ubuntu6.4 with Suhosin-Patch proxy_html/3.0.1
X-Powered-By: PHP/5.2.10-2ubuntu6.4
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 1372
Keep-Alive: timeout=15, max=99
Connection: Keep-Alive
Content-Type: text/html; charset=windows-1251

...content...

Ругается в консоль:

Ошибка: неправильный
Источник: http://localhost/##special-formed-url
Строка 1, символ 5
Исходный код:
HTTP/1.1 200 OK

и стрелочкой указывает на первую цифру 1 (в версии протокола).

Прошу помощи :)

Отредактировано pan (04-03-2010 14:32:31)

Отсутствует

 

№205-03-2010 12:40:30

arka
Участник
 
Группа: Members
Зарегистрирован: 10-08-2005
Сообщений: 183
UA: Firefox 3.6
Веб-сайт

Re: Подсунуть http-запросу контент без выполнения самого запроса к серверу

Возможно, первая строка должна быть не HTTP/1.1 200 Ok, а Status: 200

Отсутствует

 
  • Форумы
  •  » Разработка
  •  » Подсунуть http-запросу контент без выполнения самого запроса к серверу

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]