Есть ли способ перехватить запрос ресурса и дать ему ответ непосредственно от обработчика? Что-то вроде этого:Запросы на перехват с пользовательскими ответами в PhantomJS?
page.onRequest(function(request){
request.reply({data: 123});
});
Мой случай использования для использования PhantomJS, чтобы отобразить страницу, которая делает звонки на мой API. Чтобы избежать проблем с проверкой подлинности, я хотел бы перехватить все HTTP-запросы в API и вернуть ответы вручную, не делая фактического HTTP-запроса.
onResourceRequest
почти делает это, но не имеет каких-либо возможностей модификации.
Возможности, которые я вижу:
- Я мог бы сохранить страницу как шаблон Рули и визуализации данных на страницу и передать его в качестве исходного HTML в PhantomJS (вместо URL). Хотя это сработает, это затруднит изменения, поскольку мне придется писать уровень данных для каждой веб-страницы, а веб-страницы не могут стоять в одиночестве.
- Я мог бы перенаправить на
localhost
и иметь там сервер, который будет слушать и отвечать на запросы. Это предполагает, что было бы хорошо иметь открытую, не аутентифицированную версию API наlocalhost
. - Добавить данные через
page.evaluate
на глобальный сайтwindow
. У этого есть те же проблемы, что и # 1: мне нужно знать априорно, какие данные нужно странице, и написать код на стороне сервера, уникальный для каждой страницы.
Вы правы, это невозможно с помощью PhantomJS. См. [Мой ответ здесь] (http://stackoverflow.com/a/24561614/1816580). Это для CasperJS, но также применяется и для PhantomJS. –
Похоже, вы переусердствовали это, и вы могли просто написать тесты интеграции/модуляции, используя язык программирования на стороне сервера. Поскольку это ваш API, у вас должен быть доступ к исходному коду, и поэтому вы можете издеваться над запросами/ответами по мере необходимости. –