Search code examples
cookiesproxybrowsermob

Browsermob proxy - is there a way to add custom cookies via REST API?


I'm looking for a way to add 2 custom cookies to every http request.

The browsermob proxy (https://github.com/lightbody/browsermob-proxy) has removeHeaders() and addHeader() methods, but what can I do to keep existing cookies in request, but add 2 more cookies?

Thanks!


Solution

  • As I answered above, you could use proxy's REST API to set custom js handler on every request, made through the proxy.

    For example you could add any custom cookies to every request:

    curl -X POST -H 'Content-Type: text/plain' -d 'js code' http://10.100.100.20:8080/proxy/8081/interceptor/request

    In php it would look like:

    /**
     * @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);
    }