javascript - ¿La API de Wikipedia admite CORS o solo JSONP disponible?
jquery wikipedia-api (1)
Esta pregunta se relacionó con otra pregunta que se hizo hace un año. El autor preguntó cómo hacer una solicitud de origen cruzado usando JavaScript y la API de Wikipedia y un comentario fue:
en.wikipedia.org no parece permitir CORS
y se le aconsejó que usara JSONP en su lugar.
Sé que puedo usar JSONP, pero prefiero CORS si puedo usarlo.
var url = "https://en.wikipedia.org/w/api.php?action=query&titles=Main%20Page&prop=revisions&rvprop=content&format=json";
$.ajax({
url: url,
data: ''query'',
dataType: ''json'',
type: ''POST'',
headers: { ''Api-User-Agent'': ''Example/1.0'' },
origin: ''https://jsfiddle.net/'',
success: function (data) {
console.log(data);
//do something with data
}});
y obtiene el siguiente error:
XMLHttpRequest no puede cargar https://en.wikipedia.org/w/api.php?action=query&titles=Main%20Page&prop=revisions&rvprop=content&format=json . La respuesta a la solicitud de verificación previa no pasa la verificación de control de acceso: no hay encabezado ''Access-Control-Allow-Origin'' en el recurso solicitado. Por lo tanto, el origen '' https://fiddle.jshell.net '' no tiene acceso permitido.
Encabezado de solicitud:
authority:en.wikipedia.org
method:OPTIONS
path:/w/api.php?action=query&titles=Main%20Page&prop=revisions&rvprop=content&format=json
scheme:https
accept:/
accept-encoding:gzip, deflate, sdch
accept-language:en-US,en;q=0.8,fr-CA;q=0.6,fr;q=0.4,fr-FR;q=0.2,ru;q=0.2,uk;q=0.2
access-control-request-headers:accept, api-user-agent, content-type
access-control-request-method:POST
origin:https://fiddle.jshell.net
referer:https://fiddle.jshell.net/_display/
user-agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36
Encabezado de respuesta:
accept-ranges:bytes
age:0
backend-timing:D=33198 t=1462749020308717
cache-control:no-cache
content-encoding:gzip
content-length:20
content-type:text/html
date:Sun, 08 May 2016 23:10:20 GMT
p3p:CP="This is not a P3P policy! See https://en.wikipedia.org/wiki/Special:CentralAutoLogin/P3P for more info."
server:mw1114.eqiad.wmnet
set-cookie:CP=H2; Path=/; secure
set-cookie:GeoIP=US:MA:Waltham:42.37:-71.24:v4; Path=/; secure; Domain=.wikipedia.org
set-cookie:WMF-Last-Access=08-May-2016;Path=/;HttpOnly;secure;
Expires=Thu, 09 Jun 2016 12:00:00 GMT
status:200
strict-transport-security:max-age=31536000; includeSubDomains; preload
vary:Accept-Encoding
via:1.1 varnish, 1.1 varnish
x-analytics:https=1;nocookies=1
x-cache:cp1066 pass+chfp(0), cp1055 frontend pass+chfp(0)
x-client-ip:146.115.167.51
x-content-type-options:nosniff
x-powered-by:HHVM/3.12.1
x-varnish:2807049448, 2537048470
Entonces, necesito confirmación de que CORS no funciona para la API de Wikipedia y necesito usar JSONP.
Para realizar solicitudes JavaScript Fetch / XHR a Wikipedia, agregue
origin=*
a los parámetros de consulta de URL.
Entonces, la base de la URL en la pregunta debería ser así:
https://en.wikipedia.org/w/api.php?origin=*&action=query…
Consulte los documentos relacionados con CORS para el backend de Wikipedia :
Para solicitudes anónimas, el parámetro de cadena de consulta de
origin
se puede establecer en*
lo que permitirá solicitudes desde cualquier lugar.
2016-05-09 respuesta original
Consulte "Habilitar solicitudes de API entre dominios en las respuestas JSON de API" , un error abierto para los sitios de Wikimedia que indica que actualmente solo admiten solicitudes CORS de diferentes sitios Wikimedia a otros sitios Wikimedia, pero no admiten solicitudes CORS de sitios externos.
Consulte en particular https://phabricator.wikimedia.org/T62835#2191138 (del 8 de abril de 2016), que es un resumen que indica que están considerando realizar un cambio para permitir la solicitud de CORS desde sitios externos, pero aún no han habilitado eso.
2016-07-12 actualizar
Parece que implementarán el soporte de CORS hoy :
las solicitudes de API entre dominios no autenticadas ahora son posibles. Esto debe implementarse en wikis WMF con 1.128.0-wmf.10, consulte https://www.mediawiki.org/wiki/MediaWiki_1.28/Roadmap para ver el programa
https://www.mediawiki.org/wiki/MediaWiki_1.28/Roadmap indica que las fechas de implementación 1.128.0-wmf.10 son del 12 de julio de 2016 al 14 de julio de 2016.
2016-08-05 actualizar
Como señala torvin en un comentario a continuación :
para activar el nuevo comportamiento, debe especificar
origin=*
en sus parámetros de URL. Esto está actualmente enterrado en la discusión T62835 y aún no se indica en la documentation .