У меня проблемы с настройкой веб-службы Slim CORS для работы с использованием Curl
. Она прекрасно работает при вызове из службы Ajax, основанной на браузере, но я не могу заставить ее работать при вызове из сценария на сервере.CORS настроен так, чтобы разрешить доступ из '*'
$url = "https://server.local/api/v1.0/issueJWTToken";
$ch1 = curl_init();
$headers = [
"Origin: https://server.local",
"Content-Type: text/plain",
"Access-Control-Request-Headers: Content-Type, Origin"
];
curl_setopt_array($ch1, array(
CURLOPT_URL => $url,
CURLOPT_CUSTOMREQUEST => 'OPTIONS',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => true,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_NOBODY => true,
CURLOPT_SSL_VERIFYHOST => 0,
CURLOPT_SSL_VERIFYPEER => false
));
$data = curl_exec($ch1);
curl_close($ch1);
. Это возвращает следующее:
HTTP/1.1 200 OK
Date: Mon, 04 Jun 2018 12:33:51 GMT
Server: Apache/2.4.10 (Debian)
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: X-Requested-With, Content-Type, Accept,
Origin, Authorization
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Content-Length: 0
Content-Type: text/html;
charset=UTF-8
Затем я выполняю транзакцию POST следующим образом:
$post_fields = "id=1" ;
$headers = [
"Origin: https://server.local",
"Content-Type: text/plain"
];
$ch = curl_init();
curl_setopt_array($ch,[
CURLOPT_RETURNTRANSFER => true,
CURLOPT_URL => $url,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HEADER => true,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POSTFIELDS=> $post_fields,
CURLOPT_SSL_VERIFYHOST => 0,
CURLOPT_SSL_VERIFYPEER => false
]);
$data = curl_exec($ch);
Но я получаю следующее
HTTP/1.1 405 Method Not Allowed
Date: Mon, 04 Jun 2018 12:38:02 GMT Server: Apache/2.4.10 (Debian)
Allow: OPTIONS
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: X-Requested-With, Content-Type, Accept, Origin, Authorization
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Content-Length: 559
Content-Type: text/html;charset=UTF-8
<html>
<head>
<title>Method not allowed</title>
</head>
<body>
<h1>Method not allowed</h1>
<p>Method not allowed. Must be one of: <strong>OPTIONS</strong></p>
</body>
</html>
Я что-то не так делаю?Вызов OPTIONS, кажется, работает нормально, но я не могу заставить POST успешно завершиться.
Есть ли что-то возвращенное из ответа OPTIONS, который я должен передать обратно в POST?
Любая помощь очень ценится
Neil
Обновление: настройки CORS показаны ниже
$app->options('/{routes:.+}', function ($request, $response, $args) {
return $response;
});
$app->add(function ($req, $res, $next) {
$response = $next($req, $res);
return $response
->withHeader('Access-Control-Allow-Origin', '*')
->withHeader('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, Accept, Origin, Authorization')
->withHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
});