Вызов веб-службы Slim CORS с использованием Curl - PullRequest
0 голосов
/ 04 июня 2018

У меня проблемы с настройкой веб-службы 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');
});

1 Ответ

0 голосов
/ 06 июня 2018

Оказывается, я был идиотом.У меня был неправильный путь URL для API.D'о!,Спасибо тем, кто откликнулся.Neil

...