/** * @param \Zend_Http_Client $xhr */ public static function browserReceive($xhr) { PhpQuery::debug("[WebBrowser] Received from " . $xhr->getUri(true)); // TODO handle meta redirects $body = $xhr->getLastResponse()->getBody(); // XXX error ??? if (strpos($body, '<!doctype html>') !== false) { $body = '<html>' . str_replace('<!doctype html>', '', $body) . '</html>'; } $pq = PhpQuery::newDocument($body); $pq->document->xhr = $xhr; $pq->document->location = $xhr->getUri(true); $refresh = $pq->find('meta[http-equiv=refresh]')->add('meta[http-equiv=Refresh]'); if ($refresh->size()) { // print htmlspecialchars(var_export($xhr->getCookieJar()->getAllCookies(), true)); // print htmlspecialchars(var_export($xhr->getLastResponse()->getHeader('Set-Cookie'), true)); PhpQuery::debug("Meta redirect... '{$refresh->attr('content')}'\n"); // there is a refresh, so get the new url $content = $refresh->attr('content'); $urlRefresh = substr($content, strpos($content, '=') + 1); $urlRefresh = trim($urlRefresh, '\'"'); // XXX not secure ?! PhpQuery::ajaxAllowURL($urlRefresh); // $urlRefresh = urldecode($urlRefresh); // make ajax call, passing last $xhr object to preserve important stuff $xhr = PhpQuery::ajax(array('type' => 'GET', 'url' => $urlRefresh, 'dataType' => 'html'), $xhr); if ($xhr->getLastResponse()->isSuccessful()) { // if all is ok, repeat this method... return call_user_func_array(array('\\PhpQuery\\Plugin\\UtilWebBrowser', 'browserReceive'), array($xhr)); } } else { return $pq; } }