2017-02-16 15 views
1

Я немного смущен о том, как обращаться с призывом википедии api в реагировать. Я постоянно работаю в эту ошибку:Ошибка CORS в Википедии API

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource(...)

Прямо сейчас, я бег действия при подаче формы, форма принимает значение входной формы и вставляет, что в апи URL Википедии. Я пробовал использовать JSONP, но я бы предпочел не использовать это, так как я слышал, что это супер хаки.

действия/index.js

import axios from 'axios'; 

const WIKI_URL = "https://en.wikipedia.org/w/api.php?action=query&format=jsonp&list=search&titles="; 
const FETCH_ARTICLES = 'FETCH_ARTICLES'; 

export function fetchArticles(term) { 
    const url = `${WIKI_URL}${term}`; 
    const request = axios.get(url); 

    return { 
    type: FETCH_ARTICLES, 
    payload: request 
    } 

Я могу определенно добавить больше кода, если это необходимо, но от того, что я могу сказать, это то, где проблема лежит.

Редактировать: Если мне пришлось использовать JSONP, я до сих пор не смог. Я считаю, что аксиомы не поддерживают JSONP, будет ли лучшая библиотека для использования? Почему некоторые API имеют Cross Origin Reference Error, а другие нет?

+0

Похоже, что некоторые другие проблемы имеют ту же проблему https://github.com/mzabriskie/axios/issues/191 –

ответ

2

Капля format=jsonp и добавьте origin=* в параметры запроса в значении WIKI_URL:

const WIKI_URL = "https://en.wikipedia.org/w/api.php?origin=*&action=query…"; 

См the CORS-related docs for the Wikipedia backend:

For anonymous requests, origin query string parameter can be set to * which will allow requests from anywhere.

Что касается как параметр format, выход JSON является значением по умолчанию, поэтому, я думаю, вам не нужно указывать его.

1

Чтобы обойти это без использования JSONP, решение должно состоять в том, чтобы иметь прокси-сервер, который принимает ваши запросы, и добавляет правильные заголовки CORS к ответу. В качестве отправной точки, это поможет в качестве ссылки: https://gist.github.com/pauloricardomg/7084524

+0

Я надеюсь на немного более простое решение, чем создание прокси-сервера. Почему некоторые API-интерфейсы вызывают эту проблему, а другие нет? Из того, что я могу сказать, каждый раз, когда вы ссылаетесь на API, вы вызываете то, что не является вашим доменом. – Sam

+1

Если домен является «перекрестным», то есть конечная точка не разрешает домен, с которого был отправлен сценарий; браузер делает запрос OPTIONS, чтобы узнать, разрешено ли текущему происхождению сделать определенный запрос. Если API не включает ваш домен в список разрешенных источников, браузер заблокирует запрос. Это делается для того, чтобы не допустить доступа к приложениям злоумышленников для доступа к ресурсам, к которым им не разрешен доступ. – ianks