예제 #1
0
 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());
 }
예제 #2
0
 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);
 }
예제 #3
0
파일: http.php 프로젝트: xiaoyjy/retry
 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);
 }