programing

JSON API Wordpress에서 CORS 사용

codeshow 2023. 3. 13. 20:42
반응형

JSON API Wordpress에서 CORS 사용

JSON API라는 플러그인이 있는 워드프레스 사이트를 가지고 있습니다.이 플러그인은 워드프레스에 포함된 콘텐츠의 JSON 형식을 제공합니다.php 헤더에 헤더("Access-Control-Allow-Origin: *")를 추가하여 워드프레스에서 CORS를 활성화할 수 있었습니다.하지만 JSON API 플러그인이 제공하는 URL을 시도해보니 CORS가 더 이상 작동하지 않습니다.

워드프레스 사이트입니다 제가 테스트를 할 때...테스트용 cors 웹사이트에서 동작하고 있는지 확인했는데...http://kiwa-app.loading.net/

하지만 JSON api가 제공하는 URL로 시도하면 가 작동하지 않습니다.아직 '접근 제어-허용-발신지' http://kiwa-app.loading.net/?json=info 오류가 발생함

잘 부탁드립니다!!!

WordPress API를 몇 가지 사용해 보았습니다만, WP-API를 '공식'으로 사용하고 계신 분들을 위해 이 CORS에 많은 문제가 있었습니다.그리고 제가 알게 된 것은 .htaccess 접근 방식과 다른 몇 가지 접근 방식 사이에서 우연히 발견한 입니다.테마 기능에 추가합니다.php가 가장 잘 작동했습니다.

function add_cors_http_header(){
    header("Access-Control-Allow-Origin: *");
}
add_action('init','add_cors_http_header');

이러한 조합(.htaccess, header.php, api.php, functions.php)은 사용하지 마십시오.

그래, 드디어 쉬운 방법을 찾아냈어...

다음 사항을 추가해야 합니다.

     <? header("Access-Control-Allow-Origin: *"); ?>

api.php 파일에서 이 파일은 wp-content/plugins/json-api/singletons/api.php에 있습니다.

나는 그것이 같은 문제를 가진 더 많은 사람들에게 도움이 되었으면 좋겠어!

Wordpress 5.2.3을 사용하여 GET와 POST를 외부에서 사용하는 동안 다음과 같이 드디어 참깨를 열었습니다.저는 위의 모든 답변을 시도해 보았지만, 그 후 제 사례에 맞는 솔루션을 찾았습니다.

add_action( 'rest_api_init', function () {
    add_action( 'rest_pre_serve_request', function () {
        header( 'Access-Control-Allow-Headers: Authorization, Content-Type, X-WP-Wpml-Language', true );
        header("Access-Control-Allow-Origin: *");
    } );
}, 15 );

WordPress가 미래에 CORS 통제를 위한 공식적인 도그 플랩을 갖기를 바란다.

응답이 브라우저로 전송되기 전에 2개의 액션 훅을 실행하고 새로운 액션 훅을 삽입할 수 있습니다.header():

do_action("json_api", $controller, $method);
do_action("json_api-{$controller}-$method");

첫 번째 방법은 모든 방법으로 실행되며 두 번째 방법은 특정 방법을 대상으로 합니다.다음은 첫 번째 구현과 두 번째를 찾는 코멘트 방법을 보여 줍니다.

add_action( 'json_api', function( $controller, $method )
{
    # DEBUG
    // wp_die( "To target only this method use <pre><code>add_action('$controller-$method', function(){ /*YOUR-STUFF*/ });</code></pre>" );

    header( "Access-Control-Allow-Origin: *" );
}, 10, 2 );

이제 REST API가 코어와 병합되었으므로rest_api_init액션.

add_action( 'rest_api_init', function()
{
    header( "Access-Control-Allow-Origin: *" );
} );

WordPress 5(실제로는 4.4+)는 WP 헤더를 통해 처리할 수 있습니다.

이것을 시험해 보세요.

add_filter( 'wp_headers', 'send_cors_headers', 11, 1 );
function send_cors_headers( $headers ) {
    $headers['Access-Control-Allow-Origin'] = $_SERVER[ 'HTTP_ORIGIN' ];
    return $headers;
}

이것에 의해, 임의의 소스로부터의 액세스가 허가됩니다.보안을 위해 WordPress 사이트에 요청을 할 수 있는 허용 도메인 배열을 설정하고 요청을 하는 도메인이 허용 목록에 없는 경우 CORS를 단락할 수 있도록 해야 합니다.

add_filter( 'wp_headers', 'send_cors_headers', 11, 1 );
function send_cors_headers( $headers ) {
    $allowed_domains = array( 'https://my.okdomain.com' , 'http://anothergoodone.com');
    if ( ! in_array( $_SERVER[ 'HTTP_ORIGIN' ] , $allowed_domains ) ) return $headers;
    $headers['Access-Control-Allow-Origin'] = $_SERVER[ 'HTTP_ORIGIN' ];
    return $headers;
}

wordpress goto plugins > JSON API > Edit

오른쪽 파일 선택에서

json-api/singletons/api.syslog

다음 행을 추가해야 합니다.

헤더("Access-Control-Allow-Origin: *");

코드도 이와 비슷해야 합니다.다른 곳에 이 행을 추가하면 예상대로 작동하지 않을 수 있습니다.

<?php
header("Access-Control-Allow-Origin: *"); 
class JSON_API {

  function __construct() {
    $this->query = new JSON_API_Query();
    $this->introspector = new JSON_API_Introspector();
    $this->response = new JSON_API_Response();
    add_action('template_redirect', array(&$this, 'template_redirect'));
    add_action('admin_menu', array(&$this, 'admin_menu'));
    add_action('update_option_json_api_base', array(&$this, 'flush_rewrite_rules'));
    add_action('pre_update_option_json_api_controllers', array(&$this, 'update_controllers'));
  }

  function template_redirect() {

코드를 가 해결되지 ('로 )funtions.php / 신신테 / / / / / / / /) /.htaccess이 문제는 호스팅 서비스 프로바이더에게 있을 수 있습니다.

는 이 것을 해 본 , 이 가 이 로 인해 되었다.infinityfree . com( ( ( ( ( ( ( ( ( ( ( ( ( ) 。

참고 자료: https://wordpress.org/support/topic/wordpress-api-blocks-post-by-cors-policy/ https://wordpress.org/support/topic/wordpress-api-blocks-post-by-cors-policy-2/

여러 기원으로 인해 이 문제를 겪고 있는 모든 사용자를 위해

워드프레스 사이트를 호스팅하는 서버에서 ../wp-content/plugins/json-rest-api로 이동하고 여기서 플러그인을 엽니다.php 파일.

이 기능에서는

function json_send_cors_headers( $value ) {..}

헤더를 변경

header( 'Access-Control-Allow-Origin: ' . esc_url_raw( $origin ) );

로.

header( 'Access-Control-Allow-Origin: *' );

저와 같은 문제를 겪고 있는 모든 사람에게 도움이 되길 바랍니다.

이 솔루션은 WordPress 5.1.1 및 Gutenberg와 연동됩니다.

add_filter('rest_url', function($url) {
    $url = str_replace(home_url(), site_url(), $url);
    return $url;
});

WordPress 프로젝트에서 다음 파일로 이동하여 다음과 같이 수행합니다.

»wp-includes/rest-api.php★★★★

header( 'Access-Control-Allow-Origin: ' . $origin );

대상:

header( 'Access-Control-Allow-Origin: *' );

»wp-includes/http.php★★★★

header( 'Access-Control-Allow-Origin: ' . $origin );

대상:

header( 'Access-Control-Allow-Origin: *' );

언급URL : https://stackoverflow.com/questions/25702061/enable-cors-on-json-api-wordpress

반응형