javascript jquery cors jsonp wikipedia-api

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.

jsfiddle en jsfiddle

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 .