Unterstützt die Wikipedia-API CORS oder ist nur JSONP verfügbar?

Lesezeit: 4 Minuten

Unterstutzt die Wikipedia API CORS oder ist nur JSONP verfugbar
Alexan

Diese Frage bezog sich auf eine andere Frage, die vor einem Jahr gestellt wurde. Der Autor fragte, wie man eine Cross-Origin-Anfrage mit JavaScript und der Wikipedia-API stellt, und ein Kommentar lautete:

de.wikipedia.org scheint CORS nicht zuzulassen

und ihm wurde geraten, stattdessen JSONP zu verwenden.

Ich weiß, dass ich JSONP verwenden kann, aber ich bevorzuge CORS, wenn ich es verwenden kann.

ich probierte an 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
                    }});

und bekomme folgenden Fehler:

XMLHttpRequest kann nicht geladen werden
https://en.wikipedia.org/w/api.php?action=query&titles=Main%20Page&prop=revisions&rvprop=content&format=json. Die Antwort auf die Preflight-Anfrage besteht die Zugriffskontrollprüfung nicht: Auf der angeforderten Ressource ist kein Header “Access-Control-Allow-Origin” vorhanden. Herkunft ‘https://fiddle.jshell.net‘ ist daher kein Zugriff erlaubt.

Kopfzeile der Anfrage:

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

Antwortkopfzeile:

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

Ich benötige also eine Bestätigung, dass CORS für die Wikipedia-API nicht funktioniert, und ich muss JSONP verwenden.

  • Die Preflight-Antwort zeigt an, dass Wikipedia CORS nicht unterstützt – es enthält keines access-control-allow-origin und andere access-control-allow-xxxxÜberschriften.

    – Michal Foksa

    9. Mai ’16 um 4:50

Unterstutzt die Wikipedia API CORS oder ist nur JSONP verfugbar
Sideshowbarker

Um JavaScript-Abruf-/XHR-Anfragen an Wikipedia zu senden, fügen Sie hinzu origin=* zu den URL-Abfrageparametern.

Die Basis der URL in der Frage sollte also so aussehen:

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

Sehen die CORS-bezogenen Dokumente für das Wikipedia-Backend:

Bei anonymen Anfragen, origin Abfrage-String-Parameter kann auf gesetzt werden * die Anfragen von überall her erlaubt.


2016-05-09 ursprüngliche Antwort

Sehen „Domänenübergreifende API-Anfragen in den JSON-Antworten der API aktivieren“, ein offener Fehler für Wikimedia-Sites, der anzeigt, dass sie derzeit nur CORS-Anfragen von verschiedenen Wikimedia-Sites selbst an andere Wikimedia-Sites unterstützen, aber keine CORS-Anfragen von externen Sites.

Siehe insbesondere https://phabricator.wikimedia.org/T62835#2191138 (vom 8. April 2016), eine Zusammenfassung, die darauf hinweist, dass sie eine Änderung vornehmen, um CORS-Anforderungen von externen Websites zuzulassen, sie jedoch noch nicht aktiviert haben.

2016-07-12 Aktualisierung

Es scheint, dass sie es sein werden CORS-Unterstützung noch heute bereitstellen:

nicht authentifizierte domänenübergreifende API-Anfragen sind jetzt möglich. Dies sollte mit 1.128.0-wmf.10 in WMF-Wikis bereitgestellt werden, siehe
https://www.mediawiki.org/wiki/MediaWiki_1.28/Roadmap für den Zeitplan

https://www.mediawiki.org/wiki/MediaWiki_1.28/Roadmap gibt an, dass die Bereitstellungsdaten für 1.128.0-wmf.10 der 12. Juli 2016 bis 14. Juli 2016 sind.

2016-08-05 Update

Wie Torvin in einem Kommentar unten feststellt:

Um das neue Verhalten auszulösen, müssen Sie angeben origin=* in Ihren URL-Parametern. Dies ist derzeit in der begraben T62835 Diskussion und wird nicht in der Dokumentation noch.

  • Zur Verdeutlichung: Um das neue Verhalten auszulösen, müssen Sie angeben origin=* in Ihren URL-Parametern. Dies ist derzeit in der begraben T62835 Diskussion und wird nicht in der Dokumentation noch.

    – torvin

    5. August ’16 um 22:17

  • XMLHttpRequest kann nicht geladen werden de.wikipedia.org/w/api.php?origin=*&action=opensearch&format=json&search=xxx. Die Antwort auf die Preflight-Anfrage besteht die Zugriffskontrollprüfung nicht: Auf der angeforderten Ressource ist kein Header “Access-Control-Allow-Origin” vorhanden. Herkunft ‘localhost:2222‘ ist daher kein Zugriff erlaubt.

    – Diashowp2

    19. Juli ’17 um 1:55

  • @novaline Wenn etwas nicht zu funktionieren scheint, schlage ich vor, eine neue Frage mit den spezifischen Details zu posten

    – Sideshowbarker

    19. Juli ’17 um 2:11

.

232180cookie-checkUnterstützt die Wikipedia-API CORS oder ist nur JSONP verfügbar?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy