function http_parse_cookie($cookieString) { $cookie = new \http\Cookie($cookieString); return (object) array('cookies' => $cookie->getCookies(), 'expires' => $cookie->getExpires(), 'domain' => $cookie->getDomain(), 'path' => $cookie->getPath(), 'flags' => $cookie->getFlags()); }
public function sendRequest($url, array $query_data = [], $cookie = true) { /** * @var \HttpQueryString $params */ $queryData = new \http\QueryString($query_data); /** * @var \HttpRequest $http */ $request = new \http\Client\Request("GET", $url); if (!empty($queryData)) { $request->getBody()->append($queryData); } $request->setContentType("application/x-www-form-urlencoded"); $client = new \http\Client(); $cookie_file = 'cookie.log'; if ($cookie) { $cookie_str = file_exists($cookie_file) ? file_get_contents($cookie_file) : ''; $cookie = new Cookie($cookie_str); $client_cookie = $cookie->getCookie('frontend'); if ($client_cookie != 'deleted') { $client->addCookies(['frontend' => $client_cookie]); } } $client->enqueue($request); $client->send(); /** @var \HttpResponse $response */ $response = $client->getResponse($request); printf("Sent:\n%s\n\n", $response->getParentMessage()); printf("%s returned '%s'\n%s\n", $response->getTransferInfo("effective_url"), $response->getInfo(), $response->getBody()); file_put_contents($cookie_file, ''); foreach ($response->getCookies() as $cookie) { /* @var $cookie http\Cookie */ foreach ($cookie->getCookies() as $name => $value) { $cookie = new \http\Cookie(); $cookie->addCookie($name, $value); file_put_contents($cookie_file, $cookie->toString(), FILE_APPEND); } } print_r($response->getHeaders()); return json_decode($response->getBody(), true); }
function read_requests($client, $options = []) { $options['server'] = stream_socket_get_name($client, true); $dt = CY_Util_Stream::http_read($client, $options); if ($dt['errno'] !== 0) { return $dt; } if (empty($dt['data'])) { return array('errno' => CYE_DATA_EMPTY); } $o = new http\Message($dt['data']); $this->version = $o->getHttpVersion(); $this->method = $o->getRequestMethod(); $headers = $o->getHeaders(); if (!empty($headers['Content-Length'])) { if (isset($headers['Expect'])) { return array('errno' => CYE_EXPECT_FAIL); } if (empty($o->getBody())) { mp_log(CYE_ERROR, "Bad req:" . $options['server'] . " " . str_replace("\r\n", "\\r\\n", $dt['data'])); } } $this->keepalive = isset($headers['Connection']) && strcasecmp($headers['Connection'], 'keep-alive') == 0; $this->compress = isset($headers['Accept-Encoding']) && strpos($headers['Accept-Encoding'], 'gzip') !== false; if (empty($headers['Host'])) { return array('errno' => CYE_ACCESS_DENIED); } $parts = parse_url('http://' . $headers['Host'] . $o->getRequestUrl()); $_SERVER['REQUEST_URI'] = $o->getRequestUrl(); $_SERVER['QUERY_STRING'] = ''; if (!empty($parts['query'])) { $_SERVER['QUERY_STRING'] = $query = $parts['query']; parse_str($query, $_GET); } if (!empty($o->getBody())) { if (isset($headers['Content-Type']) && strpos($headers['Content-Type'], 'multipart/form-data') !== false) { // grab multipart boundary from content type header preg_match('/boundary=(.*)$/', $headers['Content-Type'], $matches); // content type is probably regular form-encoded if (count($matches)) { $boundary = $matches[1]; $_POST = cy_parse_http_multipart($o->getBody(), $boundary); } } if (!isset($boundary)) { parse_str($o->getBody(), $_POST); } } if (isset($headers['Cookie'])) { $c = new http\Cookie($headers['Cookie']); $_COOKIE = $c->getCookies(); } $_REQUEST = array_merge($_GET, $_POST, $_COOKIE); return array('errno' => 0); }