如何使用api密钥将Slim Framework 3中的多个标头值设置为Web服务?

时间:2016-12-29 07:08:52

标签: php json slim slim-3

我是Slim Framework 3的新手。我在访问具有Api Key标头值的Web服务时遇到问题。我有一个Api Key值,并想访问Web服务以获取JSON数据。这是我的瘦身方法代码:

$app->get('/getbooking/{id}', function (Request $request, Response $response, $args) {
  $id = $args['id'];
  $string = file_get_contents('http://maindomain.com/webapi/user/'.$id);


  //Still confuse how to set header value to access the web service with Api Key in the header included.
});

我在Postman(Chrome应用程序)中尝试过Web服务来访问,我得到了结果。我使用GET方法并为Api Key设置Headers值。

但是如何在Slim 3中设置Headers值才能访问Web服务?

感谢您提前:)

1 个答案:

答案 0 :(得分:2)

这实际上与Slim没有任何关系。有多种方法可以在PHP中发出HTTP请求,包括流(file_get_contents()),curl和诸如Guzzle之类的库。

您的示例使用file_get_contents(),因此要在其中设置标头,您需要创建一个上下文。像这样:

$app->get('/getbooking/{id}', function (Request $request, Response $response, $args) {
  $id = $args['id'];  // validate $id here before using it!

  // add headers. Each one is separated by "\r\n"
  $options['http']['header'] = 'Authorization: Bearer {token here}';
  $options['http']['header'] .= "\r\nAccept: application/json";

  // create context
  $context = stream_context_create($options);

  // make API request
  $string = file_get_contents('http://maindomain.com/webapi/user/'.$id, 0, $context);
  if (false === $string) {
    throw new \Exception('Unable to connect');
  }

  // get the status code
  $status = null;
  if (preg_match('@HTTP/[0-9\.]+\s+([0-9]+)@', $http_response_header[0], $matches)) {
      $status = (int)$matches[1];
  }

  // check status code and process $string here
}