Прокси-сервер Browsermob — есть ли способ добавить пользовательские файлы cookie через REST API?

Я ищу способ добавить 2 пользовательских файла cookie для каждого http-запроса.

Прокси-сервер browsermob (https://github.com/lightbody/browsermob-proxy) имеет removeHeaders( ) и addHeader(), но что я могу сделать, чтобы сохранить существующие файлы cookie в запросе, но добавить еще 2 файла cookie?

Спасибо!


person Dmitrii Voitovich    schedule 04.03.2015    source источник
comment
Не могли бы вы дать больше информации о том, как вы используете BrowserMob Proxy? Вы используете встроенный или автономный режим? Какой язык (Java, Python и т.д.)? А какая версия BrowserMob Proxy?   -  person Jason Hoetger    schedule 10.03.2015
comment
Версия 2.1, автономный режим, но я уже нашел решение. Вы можете установить обработчик запросов через REST API. Например, curl -X POST -H 'Тип содержимого: text/plain' -d 'здесь код js' 10.100.100.20:8080/proxy/8081/interceptor/request   -  person Dmitrii Voitovich    schedule 12.03.2015
comment
Наш код js выглядит так: $jsHandlerString = sprintf( 'var c = request.getMethod().getFirstHeader("Cookie") ? request.getMethod().getFirstHeader("Cookie").getValue() : ""; request.getMethod().setHeader("Cookie", c + "; %s");', implode('; ', $cookiesArray) );   -  person Dmitrii Voitovich    schedule 12.03.2015


Ответы (2)


Вы можете использовать этот метод для вызова собственного кода js в каждом запросе/ответе https://github.com/lightbody/browsermob-proxy#http-request-manipulation Пример на Python

def response_interceptor(self, js):
"""
Executes the javascript against each response
:param js: the javascript to execute
"""
r = requests.post(url='%s/proxy/%s/interceptor/response' % (self.host, self.port),
          data=js,
          headers={'content-type': 'x-www-form-urlencoded'})
return r.status_code

def request_interceptor(self, js):
"""
Executes the javascript against each request
:param js: the javascript to execute
"""
r = requests.post(url='%s/proxy/%s/interceptor/request' % (self.host, self.port),
          data=js,
          headers={'content-type': 'x-www-form-urlencoded'})
return r.status_code

и тест:

def test_request_interceptor_with_parsing_js(self):
"""
/proxy/:port/interceptor/request
"""
js = 'alert("foo")'
status_code = self.client.request_interceptor(js)
assert(status_code == 200)
person Roman Lukmanov    schedule 05.03.2015

Как я ответил выше, вы можете использовать REST API прокси для установки собственного обработчика js для каждого запроса, сделанного через прокси.

Например, вы можете добавить любые пользовательские файлы cookie к каждому запросу:

curl -X POST -H 'Тип содержимого: text/plain' -d 'js code' http://10.100.100.20:8080/proxy/8081/interceptor/request

В php это будет выглядеть так:

/**
 * @param Proxy $proxyObject
 * @param array $cookiesArray
 */
protected function _setRequestCookies(Proxy $proxyObject, array $cookiesArray)
{
    foreach ($cookiesArray as $nameString => $valueString) {
        $cookiesArray[$nameString] = $nameString . '=' . $valueString;
    }

    $jsHandlerString = sprintf(
        'var c = request.getMethod().getFirstHeader("Cookie") ? request.getMethod().getFirstHeader("Cookie").getValue() : ""; request.getMethod().setHeader("Cookie", c + "; %s");',
        implode('; ', $cookiesArray)
    );

    $urlString = sprintf('%sproxy/%u/interceptor/request', $this->_hubUrlString, $proxyObject->getPort());

    $this->_requesterObject->makeRequest($urlString, Requester::REQUEST_METHOD_POST, $jsHandlerString);
}
person Dmitrii Voitovich    schedule 12.03.2015