/** * Sends the HTTP message [Request] to a remote server and processes * the response. * * @param Request $request request to send * @param Response $request response to send * @return Response */ public function _send_message(Request $request, Response $response) { $http_method_mapping = array(HTTP_Request::GET => HTTPRequest::METH_GET, HTTP_Request::HEAD => HTTPRequest::METH_HEAD, HTTP_Request::POST => HTTPRequest::METH_POST, HTTP_Request::PUT => HTTPRequest::METH_PUT, HTTP_Request::DELETE => HTTPRequest::METH_DELETE, HTTP_Request::OPTIONS => HTTPRequest::METH_OPTIONS, HTTP_Request::TRACE => HTTPRequest::METH_TRACE, HTTP_Request::CONNECT => HTTPRequest::METH_CONNECT); // Create an http request object $http_request = new HTTPRequest($request->uri(), $http_method_mapping[$request->method()]); if ($this->_options) { // Set custom options $http_request->setOptions($this->_options); } // Set headers $http_request->setHeaders($request->headers()->getArrayCopy()); // Set cookies $http_request->setCookies($request->cookie()); // Set query data (?foo=bar&bar=foo) $http_request->setQueryData($request->query()); // Set the body if ($request->method() == HTTP_Request::PUT) { $http_request->addPutData($request->body()); } else { $http_request->setBody($request->body()); } try { $http_request->send(); } catch (HTTPRequestException $e) { throw new Request_Exception($e->getMessage()); } catch (HTTPMalformedHeaderException $e) { throw new Request_Exception($e->getMessage()); } catch (HTTPEncodingException $e) { throw new Request_Exception($e->getMessage()); } // Build the response $response->status($http_request->getResponseCode())->headers($http_request->getResponseHeader())->cookie($http_request->getResponseCookies())->body($http_request->getResponseBody()); return $response; }
/** * Execute the request using the PECL HTTP extension. (recommended) * * @param Request $request Request to execute * @return Response */ protected function _http_execute(Request $request) { $http_method_mapping = array(HTTP_Request::GET => HTTPRequest::METH_GET, HTTP_Request::HEAD => HTTPRequest::METH_HEAD, HTTP_Request::POST => HTTPRequest::METH_POST, HTTP_Request::PUT => HTTPRequest::METH_PUT, HTTP_Request::DELETE => HTTPRequest::METH_DELETE, HTTP_Request::OPTIONS => HTTPRequest::METH_OPTIONS, HTTP_Request::TRACE => HTTPRequest::METH_TRACE, HTTP_Request::CONNECT => HTTPRequest::METH_CONNECT); // Create an http request object $http_request = new HTTPRequest($request->uri(), $http_method_mapping[$request->method()]); // Set custom options $http_request->setOptions($this->_options); // Set headers $http_request->setHeaders($request->headers()->getArrayCopy()); // Set cookies $http_request->setCookies($request->cookie()); // Set body $http_request->setBody($request->body()); try { $http_request->send(); } catch (HTTPRequestException $e) { throw new Kohana_Request_Exception($e->getMessage()); } catch (HTTPMalformedHeaderException $e) { throw new Kohana_Request_Exception($e->getMessage()); } catch (HTTPEncodingException $e) { throw new Kohana_Request_Exception($e->getMessage()); } // Create the response $response = $request->create_response(); // Build the response $response->status($http_request->getResponseCode())->headers($http_request->getResponseHeader())->cookie($http_request->getResponseCookies())->body($http_request->getResponseBody()); return $response; }
// over and over to demonstrate the performance benefit of keeping your // TCP connection alive between requests. By minimizing the HTTP overhead // in this manner, you nearly double your speed. // Your authentication ID/token (obtained in your SmartyStreets account) $authId = urlencode("raw id here"); $authToken = urlencode("raw token here"); // The REST endpoint $url = "https://api.smartystreets.com/street-address/?auth-id={$authId}&auth-token={$authToken}"; // Your input to the API... $addresses = array(array("street" => "1 infinite loop", "city" => "cupertino", "state" => "ca", "zipcode" => "95014", "candidates" => 10), array("street" => "1600 pennsylvania Ave.", "zipcode" => "20500", "candidates" => 3)); // LiveAddress API expects JSON input by default, but you could send XML // if you set the Content-Type header to "text/xml". $post = json_encode($addresses); // Prepare the POST request, and set the body of it. $request = new HTTPRequest($url, HTTP_METH_POST); $request->setBody($post); // Simple statistic variables $max = 0; $min = 99999999; $sum = 0; $requests = 100; echo "<pre>"; // Do the requests, and time it for ($i = 0; $i < $requests; $i++) { $start = microtime(true); $request->send(); // In a real case, you'd call setBody() before this, to do the next 100 addresses $end = microtime(true); $ms = ($end - $start) * 1000; // For the record, you can get the response with: // $response = $request->getResponseBody();
/** * 发送notification或message。请阅读友盟文档。 */ public function send($data) { $token = $this->grantToken(); $newData = $data; foreach ($token as $k => $v) { $newData[$k] = $v; } //必填 消息发送类型,其值为unicast,listcast,broadcast,groupcast或customizedcast if (!isset($data['type'])) { throw new Exception('need param: type'); } // 可选 当type=customizedcast时,开发者填写自己的alias,友盟根据alias进行反查找,得到对应的device_token。多个alias时用英文逗号分,不能超过50个。 if (isset($data['alias']) && !empty($data['alias'])) { if (is_array($data['alias'])) { $newData['alias'] = implode(',', $data['alias']); } else { $newData['alias'] = $data['alias']; } } // 必填 消息类型,值为notification或者message if (!isset($data['payload']['display_type'])) { $newData['payload']['display_type'] = 'notification'; } // 必填 通知栏提示文字。但实际没有用,todo确认 if (!isset($data['payload']['body']['ticker'])) { $newData['payload']['body']['ticker'] = $data['payload']['body']['title']; } //可选 消息描述。用于友盟推送web管理后台,便于查看。 if (!isset($data['description'])) { $newData['description'] = $data['payload']['body']['title']; } $defaultTrueParams = array('play_vibrate', 'play_lights', 'play_sound'); foreach ($defaultTrueParams as $one) { if (isset($data['payload']['body'][$one]) && ($data['payload']['body'][$one] == false || $data['payload']['body'][$one] == 'false')) { $newData['payload']['body'][$one] = 'false'; } } $http = new \HTTPRequest($this->conf['api_uri_prefix'] . 'api/send', HTTP_METH_POST); $http->setBody(json_encode($newData)); $http->send(); $body = $http->getResponseBody(); if ($http->getResponseCode() != 200) { throw new Exception($body); } $tmp = json_decode($body, true); if (!isset($tmp['ret']) || $tmp['ret'] != 'SUCCESS') { throw new Exception($body); } return true; }