Я пытаюсь создать настраиваемый адаптер Auth для устаревшего API. Назовем адаптер TR42
. Прямо сейчас, я отлаживаю TR42::check()
поэтому я использую жестко заданные значения:
<?php class TR42 extends \lithium\core\Object { public function __construct(array $config = []) { $defaults = [ 'scheme' => 'http', 'host' => 'localhost/tr42/mock_api_authenticate.php', 'action' => 'authLookup', 'fields' => ['username', 'password'], 'method' => 'POST' ]; parent::__construct($config + $defaults); } public function check($credentials, array $options = []) { $postConfig = [ /** * Should I be using 'body' or 'query' to submit POST fields? */ 'body' => [ 'username' => 'housni', 'password' => sha1('legacyHashedPassword'), 'action' => 'authLookup' ], 'query' => 'username=housni&password=' . sha1('legacyHashedPassword') . '&action=authLookup', ]; $request = new Request($postConfig + $this->_config); $stream = new Curl($this->_config); $stream->open(); $stream->write($request); $response = $stream->read(); $stream->close(); echo '<pre>' . print_r($response, true) . '</pre>'; die(); } } ?>
Файл http://localhost/tr42/mock_api_authenticate.php
выглядит так:
<?php echo '<h1>This request is: ' . $_SERVER['REQUEST_METHOD'] . '</h1>'; if (!empty($_POST)) { echo '<h1>YAY</h1>'; } else { echo '<h1>NAY</h1>'; } echo '<pre>' . print_r($_POST, true) . '</pre>'; ?>
Поскольку мой код cURL отправляет запрос POST, я бы ожидал, что мой $ _POST будет заполнен в mock_api_authenticate.php
но этого не происходит, потому что вывод из print_r () TR42 :: check ():
HTTP/1.1 200 OK Date: Sun, 18 Aug 2013 04:46:34 GMT Server: Apache/2.2.14 (Ubuntu) X-Powered-By: PHP/5.4.17-1~lucid+1 Vary: Accept-Encoding Content-Length: 63 Connection: close Content-Type: text/html This request is: POST NAY Array ( )
Он говорит, что запрос POST, но массив POST (последний пустой массив) пуст.
Что я делаю не так?
Спасибо за прочтение 🙂
Я предлагаю использовать литиевые Connections
и классы Service
, чтобы избежать написания вашего запроса на завивание таким образом.
Извлеките устаревшую конфигурацию подключения api (хост, порт и т. Д.) К соединению с именем «api» или что-то еще, а затем в теге check()
вашего адаптера напишите что-нибудь вроде:
public function check($credentials, array $options = []) { return Connections::get('api')->connection->post('/tr42/mock_api_authenticate.php', $credentials); }