Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Wikipedia API +跨源请求

Wikipedia API +跨源请求
EN

Stack Overflow用户
提问于 2014-05-30 02:08:30
回答 5查看 21.8K关注 0票数 30

我试图使用JavaScript和CORS访问维基百科。

据我所知,维基百科应该支持CORS:请求

我尝试了以下脚本:创建一个XMLHttpRequest+凭证/XDomainRequest,添加一些HTTP头(“访问控制-允许-凭据”,等等)。然后发送查询。

http://jsfiddle.net/lindenb/Vr7RS/

代码语言:javascript
运行
AI代码解释
复制
var WikipediaCORS=
    {
        setMessage:function(msg)
        {
            var span=document.getElementById("id1");
            span.appendChild(document.createTextNode(msg));
        },
        // Create the XHR object.
        createCORSRequest:function(url)
        {
            var xhr = new XMLHttpRequest();

            if ("withCredentials" in xhr)
            {
                xhr.open("GET", url, true);
            }
            else if (typeof XDomainRequest != "undefined")
            {
                xhr = new XDomainRequest();
                xhr.open(method, url);
            }
            else
            {
                return null;
            }
            xhr.setRequestHeader("Access-Control-Allow-Credentials", "true");
            xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
            return xhr;
        },
        init:function()
        {
            var _this = this;
            var url = 'http://en.wikipedia.org/w/api.php?action=opensearch&search=Javascript&format=json';
            var xhr = this.createCORSRequest(url);
            if (!xhr)
            {
                this.setMessage('CORS not supported');
                return;
            }

            xhr.onload = function()
            {
                _this.setMessage(xhr.responseText);
            };
            xhr.onerror = function()
            {
                _this.setMessage('Woops, there was an error making the request.');
            };
            xhr.send();
        }
    };

但是我的脚本失败了(调用“xhr.onerror”)。我怎么才能修好它?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-05-30 02:22:16

CORS标头被发送以允许请求脚本访问内容。

维基百科是派来的不是你。

根据评论:

维基百科是一般规则的一个例外,它要求您将origin参数附加到您请求的URL中。

我认为这背后的原因与缓存有关。我不知道他们使用的是哪种机制,但这可能会使他们更容易更好地存储缓存对象并以这种方式构建变体。

有关CORS的更多信息,请参阅MediaWiki API文档:

CORS API还要求将源作为请求参数提供,该参数名为“MediaWiki”,与CORS协议所需的源标头匹配。请注意,这个头必须包含在任何飞行前请求中,因此即使对于POST请求,也应该包括在请求URI的查询字符串部分中。 如果CORS原始检查通过,MediaWiki将在响应中包含访问控制允许凭据: true标头,因此可以发送身份验证cookie。

这意味着你必须发送一个Origin头来告诉维基百科你来自哪里。维基百科是在管理访问,而不是你。

发送此源标头:

代码语言:javascript
运行
AI代码解释
复制
xhr.setRequestHeader("Origin", "http://www.yourpage.com");

Access-Control-Allow-*头是响应头,而不是请求头。

此外,维基百科还需要内容类型json。

代码语言:javascript
运行
AI代码解释
复制
xhr.setRequestHeader("Content-Type", "application/json; charset=UTF-8");
票数 13
EN

Stack Overflow用户

发布于 2016-08-12 07:20:19

我在做一个freeCodeCamp项目时也遇到了同样的问题,解决方案太简单了,我笑了,因为我花了几个小时来寻找它。在您的jQuery URL中包括下面的参数。

&origin=*

工作CodePen

代码语言:javascript
运行
AI代码解释
复制
$.getJSON(
  'https://en.wikipedia.org/w/api.php?action=query&format=json&gsrlimit=15&generator=search' +
  '&origin=*' + // <-- this is the magic ingredient!
  '&gsrsearch='q, function(data){ /* ... */ }
);
票数 118
EN

Stack Overflow用户

发布于 2016-08-07 09:22:13

截至2016年8月,Wikipedia通过使用普通的Ajax请求(不需要JSONP/回调操作)支持CORS请求。这可以通过在API调用中设置原点来实现。

对于经过身份验证的请求,这必须与Origin中的“源”之一完全匹配(您需要在执行Ajax调用时使用beforeSend属性来设置这个值)。

对于未经身份验证的请求,您可以简单地将其设置为星号(*),并且它在使用来自域的简单$.getJSON时工作。

示例API调用:

https://en.wikipedia.org//w/api.php?action=opensearch&format=json&origin=*&search=stack&limit=10

更多是在MediaWiki API沙箱:MediaWiki API沙箱

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23952045

复制
相关文章
Java内存缓存-通过Google Guava创建缓存
Guava是Google guava中的一个内存缓存模块,用于将数据缓存到JVM内存中。实际项目开发中经常将一些公共或者常用的数据缓存起来方便快速访问。
小码农薛尧
2019/08/27
2.9K0
Java内存缓存-通过Google Guava创建缓存
怎么获得google adsense账户的批准!
不得不说,Adsense是最佳联盟广告。因为它的CPC单价比任何联盟广告都要高。相对中文网站,英文网站更加容易获得google adsense的许可,因为谷歌官方做出了明确的指示,中国地区网站域名年龄必须有六个月以上的年龄才能获得许可。所以英文网站有天然的优势。
Hoan外贸建站
2020/12/04
2.4K0
看我如何发现Google云平台漏洞并获得$7500赏金
本文讲述了一名乌拉圭17岁高中生,因对信息安全感兴趣,通过学习研究,独立发现谷歌云平台漏洞并获得$7500美金(此前,他曾发现了价值$10000美金的谷歌主机头泄露漏洞)。在谈论该漏洞的具体细节之前,希望读者对谷歌云服务和API机制相关能有所了解,可以先来熟悉几个相关概念。 先导概念 谷歌运行有一个名为Google Service Management的管理服务,谷歌通过它来管理各种应用谷歌系统的内外部接口和用户自行创建的云端服务。在Google Service Management下,用户可以在自己的
FB客服
2018/03/22
2.3K0
看我如何发现Google云平台漏洞并获得$7500赏金
2020 Google 编程之夏活动总结
随着十月份导师峰会与课题回顾的结束,现在我们宣布 Google 编程之夏 2020 活动在 Jenkins 社区圆满结束。我们谨代表 Jenkins 团队,感谢所有今年参与到此次活动的参与者们: 学生、导师、申请者以及各位贡献者。Google 编程之夏活动的顺利举行离不开 Jenkins 社区各位成员的积极参与。
LinuxSuRen
2021/04/13
5830
2020 Google 编程之夏活动总结
如何通过Google Search Console分析搜索流量降低的情况?
首先打开Google Search Console 然后看到我们已经验证好的站点 然后就有以下的图表分析出现。
雾海梦曦
2022/11/14
5010
如何通过Google Search Console分析搜索流量降低的情况?
Google 就是 Google
Google 就是 Google 啊!今天在浏览新闻的时候,突然看到这么 一条新闻:
非著名程序员
2018/12/19
1.1K0
Google 就是 Google
Edge ,Google Chrome 打不开所有网页
1、打开注册表,增加如下项HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge 2、再DWORD(32位)值,命名RendererCodeIntegrityEnabled,值为0 3、重启edge即可。
上善若水.夏
2020/06/16
2.3K0
使用Google JS api 创建 文档
https://developers.google.com/docs/api/reference/rest/v1/documents/request#Request
拿我格子衫来
2022/01/24
3.4K0
使用Google JS api 创建 文档
如何让机器获得幽默感——Google图学习技术揭秘
原文: Graph-powered Machine Learning at Google 作者: Sujith Ravi 译者: KK4SBB 责编:何永灿,关注人工智能,投稿请联系heyc@csdn.net或微信号289416419 近些年来,机器学习技术取得了巨大的进步,使得计算机系统能够解决复杂的现实问题。其中一项先进技术就是由Google研究院的Expander组开发的大规模、基于图的机器学习平台。基于图的机器学习是一款功能强大的工具,被广泛用于我们日常接触到的Google产品和功能,比如用于收
用户1737318
2018/06/06
6050
【Google Play】创建 Google 开发者账号 ( 注册邮箱账号 | 创建开发者账号 )
【Google Play】创建 Google 开发者账号 ( 注册邮箱账号 | 创建开发者账号 )
韩曙亮
2023/03/29
15.2K0
【Google Play】创建 Google 开发者账号 ( 注册邮箱账号 | 创建开发者账号 )
Google 的 Firebase 如何删除项目
https://www.ossez.com/t/google-firebase/13792
HoneyMoose
2021/11/02
3.3K0
Google 的 Firebase 如何删除项目
google scholar_google
DOI全称为Digital Object Unique Identifier,即数字对象唯一标识符,通俗一点来讲,DOI就是一篇文献的身份证
全栈程序员站长
2022/11/10
6800
如何关闭google的安全搜索
我们平常使用google搜索,默认是已启用安全搜索的。例如在google搜索“1”,右上角会出现“已启用安全搜索”。 进入google帮助找到安全搜索内容https://support.google.com/websearch/answer/510 屏蔽 Google 上的色情内容 您可以使用安全搜索设置来滤除 Google 上包含露骨内容的搜索结果(例如色情内容)。安全搜索并非 100% 准确,但它能帮您屏蔽掉大多数成人内容。 您可将安全搜索用作一种家长控制方式,以使孩子远离您手机
小歪
2018/04/04
9.2K0
如何关闭google的安全搜索
在Managed Code通过Google Gmail发送邮件以及如何通过Outlook配置Gmail
在项目开发中,发送邮件时一种非常常见的功能。一般的情况下,大型的公司都有自己的邮件系统,我们可以直接通过公司的Pop/SMTP Server进行邮件的发送和接收。不过,对于一些小公司不具有这样的条件,他们一般通过一些公共的邮件服务通过商提供的邮件服务。比如Sina,163就是很好的、常用的邮件服务。不过相比之下,我还是习惯使用Google Gmail。 接下来,我将介绍两方面来介绍今天的内容,如果通过Managed code通过Gmail进行邮件的发送,以及如何在Outlook中配置Gmail。今天介绍的东
蒋金楠
2018/02/07
1.8K0
在Managed Code通过Google Gmail发送邮件以及如何通过Outlook配置Gmail
如何通过Google来使用ggplot2可视化
今天是大年初二,这篇文章我只想传达一点: 没有什么菜鸟级别的生物信息学数据处理是不能通过Google得到解决方案的,如果有,请换个关键词继续Google! 第一部分 首先用两分钟的时间简单介绍一下R语言: 因为这个语言是肉丝儿(Ross Ihaka)和萝卜特(Robert Gentleman)两个人1992年在S语言的基础上发明出来的开源语言,所以叫做R语言。这两个人是统计学教授出身,所以R语言在统计学方面有着纯正的血统!如果你平时的工作和统计相关,你好意思不会点R语言么? 另外,在R语言的官网上,有这样一
生信技能树
2018/03/08
2K0
如何通过Google来使用ggplot2可视化
如何切换google play地区?
后来我使用我的 Nexus 6 手机注册:设置->帐号->添加帐号->Google->创建帐号,成功注册。
崔哥
2022/09/08
2.3K0
通过 SeeTheStats 公开 Google Analytics 统计结果
广告商投放广告的时候,需要了解投放网站的流量,了解网站的流量的方法有很多,一般可以通过 Alexa,Google Ad Planer,但是这些都不是十分准确的,比如有个广告商通过 Alexa 的数据,以为我的博客一天的流量有 3W, 🙂 。 了解网站流量最直接的方法就是能够查看到统计工具的报表,如果要给广告商 Google Analytics 的统计结果,需要在 Google Analytics 后台操作给他的 Google 帐号赋权查看结果,这样非常麻烦。 SeeTheStats 就是一个使用 Googl
Denis
2023/04/14
4510
通过 SeeTheStats 公开 Google Analytics 统计结果
点击加载更多

相似问题

Python中int的大小是多少?

15

SQL Int(N)的大小是多少?

12

c++:int[3]的大小是多少(int[3])

30

根据C标准,int的大小是多少?

25

Nullable<Int32>的大小是多少?

42
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档