Как прослушивать http-запросы в расширении Chrome и как устанавливать для него разрешения в manifest.json

Я пытаюсь реализовать идею waldalla в создайте прокси-сервер в расширении Google Chrome.

Я понимаю, как кодировать в расширении Chrome сторону проблемы, обращенную к серверу, то есть отправку HTTP-запросов и получение ответов, но я не знаю, как сделать сторону, обращенную к клиенту, то есть прослушивание< /em> на определенном порту для HTTP-запросов из-за пределов браузера.

Я ознакомился с Native Messaging API Chrome. Однако из того, что я вижу, он используется для связи через stdin/stdout, а не через HTTP.

Итак, как я могу прослушивать HTTP-запросы в расширении Google Chrome? И как мне установить права для этого в файле расширения manifest.json?


person halloleo    schedule 21.11.2018    source источник
comment
@wOxxOm С приложением локального прокси-сервера все в порядке, но HTTP-запрос во внешний мир должен выполняться Chrome. Таким образом, прокси-приложение должно будет обмениваться запросами и ответами с Chrome через собственный обмен сообщениями, верно?   -  person halloleo    schedule 21.11.2018
comment
Теперь, когда я действительно прочитал тему, на которую вы ссылаетесь, я могу сказать, что вам нужно написать собственное приложение для ОС (например, с использованием node.js), которое действует как локальный прокси-сервер для других приложений. Это приложение будет направлять запросы к вашему расширению через API-интерфейс nativeMesaging (который основан на stdio, как описано в документации), расширение будет делать запрос с помощью XMLHttpRequest или получать в файле фоновый скрипт и отправьте ответ обратно через nativeMessaging API. Кстати, добавьте монотонно увеличивающийся числовой идентификатор запроса к каждому сообщению, чтобы определить его ответ.   -  person wOxxOm    schedule 21.11.2018
comment
@wOxxOm Спасибо за подробный план возможного решения. Имеет смысл для меня!   -  person halloleo    schedule 21.11.2018


Ответы (1)


Расширение Chrome не имеет возможности* прослушивать сетевые подключения, по крайней мере произвольные.

* Возможным исключением здесь является WebRTC, но это не очень полезно для проксирования стандартного HTTP.

Встроенный обмен сообщениями – это действительно способ обойти API. ограничения, делая все, что вы хотите, в собственном сопутствующем приложении, которое общается с расширением через STDIO.

[Extension] <-- STDIO --> [Native host] <-- anything, eg. HTTP --> [Client]

Обратите внимание, что это не произвольный STDIO, а специальный собственный протокол хоста на основе JSON.

Также обратите внимание, что расширение должно создать новую копию собственного хост-приложения; он не может подключиться к уже работающему.

person Xan    schedule 22.11.2018