/** * Processes an RPC request for http data. * * @param RequestItem $requestItem The request parameters. * @return array An array of content, status code, and headers from the * response. The expected structure is undocumented in the spec, sadly. * TODO: Filter some/most headers from the response (waste of bandwidth). */ public function handleItem(RequestItem $requestItem) { try { // We should only get RPC requests at this point. There's a class cast // here from RequestItem->RpcRequestItem, but PHP doesn't seem to // complain. $options = MakeRequestOptions::fromRpcRequestItem($requestItem); $makeRequest = new MakeRequest(); $context = new GadgetContext('GADGET'); $response = $makeRequest->fetch($context, $options); $result = array('content' => $response->getResponseContent(), 'status' => $response->getHttpCode(), 'headers' => $response->getResponseHeaders()); } catch (SocialSpiException $e) { $result = new ResponseItem($e->getCode(), $e->getMessage()); } catch (Exception $e) { $result = new ResponseItem(ResponseError::$INTERNAL_ERROR, "Internal error: " . $e->getMessage()); } return $result; }
/** * Processes an RPC request for http data. * * @param RequestItem $requestItem The request parameters. * @return array An array of content, status code, and headers from the * response. The expected structure is undocumented in the spec, sadly. * TODO: Filter some/most headers from the response (waste of bandwidth). */ public function handleItem(RequestItem $requestItem) { try { // We should only get RPC requests at this point. There's a class cast // here from RequestItem->RpcRequestItem, but PHP doesn't seem to // complain. $options = MakeRequestOptions::fromRpcRequestItem($requestItem); $makeRequestClass = Config::get('makerequest_class'); $makeRequest = new $makeRequestClass(); $contextClass = Config::get('gadget_context_class'); $context = new $contextClass('GADGET'); $response = $makeRequest->fetch($context, $options); // try to decode json object here since in order // to not break gadgets.io.makeRequest functionality // $response->getResponseContent() has to return a string $content = json_decode($response->getResponseContent(), true); $result = array('content' => $content ? $content : $response->getResponseContent(), 'status' => $response->getHttpCode(), 'headers' => $response->getResponseHeaders()); } catch (SocialSpiException $e) { $result = new ResponseItem($e->getCode(), $e->getMessage()); } catch (Exception $e) { $result = new ResponseItem(ResponseError::$INTERNAL_ERROR, "Internal error: " . $e->getMessage()); } return $result; }