如何从 javascript 调用 IBM Watson 服务

2023-11-30

我正在使用 IBM Watson 服务实现虚拟代理。我的应用程序是使用 Jquery、Angular JS 和 Java 开发的。目前我正在从 java 中间层调用 watson 服务。但我想避免这种情况并直接从 javascript 调用。当我使用 XML Http 请求从 javascript 调用时,我收到 CORS 错误。如何解决这个问题?

下面是我的代码:

var username = "uid";
var password = "pwd";
var xhr = new XMLHttpRequest();
xhr.open('GET', 'url');
//xhr.withCredentials = true;
xhr.setRequestHeader("Access-Control-Allow-Headers", "Access-Control-Allow-Origin,Content-Type, application/json, Authorization");
xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
xhr.setRequestHeader('Access-Control-Allow-Credentials', '*');
xhr.setRequestHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
xhr.setRequestHeader('Content-Type', undefined);
xhr.setRequestHeader('Authorization', 'Basic ' + btoa(username + " " + password));
xhr.send('"query":"hi"');

IBM Watson 服务尚不支持从基于浏览器的应用程序获取跨源请求。

答案见由于 Rails/AJAX 应用程序上的 CORS,无法在本地访问 IBM Watson API:

我们不支持 CORS,我们正在努力解决它,但在您的情况下,尚不支持视觉识别。

这意味着某些服务支持 CORS,但我猜您尝试过的服务不是其中之一。

因此,除了您所说的您现在正在做的事情(从服务器端 Java 层访问服务)之外,从 Web 应用程序中运行的 JavaScript 代码获取服务的唯一选择是,要么设置您自己的服务器 -侧面代理与https://github.com/Rob--W/cors-anywhere或类似的,或者通过开放的 CORS 代理发送您的请求,例如https://cors-anywhere.herokuapp.com/(尽管在您的请求包含您不想向第三方代理服务运营商公开的任何类型的身份验证令牌的情况下,您不太可能想要这样做)。

这种代理的工作方式是,而不是使用https://gateway.watsonplatform.net/some/api作为在客户端 JavaScript 代码中指定的请求 URL,您可以指定代理 URL,例如https://cors-anywhere.herokuapp.com/https://gateway.watsonplatform.net/some/api,代理将实际请求发送到服务,获取响应,并添加所需的内容Access-Control-Allow-Origin响应标头和其他标头并传递给它。

因此,包含 CORS 标头的响应就是浏览器看到的内容。

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS有关 CORS 如何工作的更多详细信息,但主要要了解的是浏览器是 CORS 执行点。因此,在使用 Watson 服务的情况下,浏览器实际上会从 Watson API 获取响应 — 您将能够在浏览器中使用 devtools 查看响应 — 但浏览器会将响应公开给您的客户端 JavaScript 代码仅当响应包含Access-Control-Allow-Origin响应标头,指示发送响应的服务器已选择接收来自 Web 应用程序中运行的客户端 JavaScript 的跨域请求。

这就是为什么,无论如何,所有xhr.setRequestHeader("Access-Control-Allow-上面的 XHR 代码片段中的行只需删除,因为Access-Control-Allow-*标题是response标头,而不是请求标头;在请求中将它们发送到服务器对 CORS 没有影响,因为如上所述,浏览器是 CORS 执行点,而不是服务器。

因此,服务器不会从浏览器收到一些请求并说,好吧,我看到这个请求有正确的标头,所以我会允许它。相反,服务器允许来自浏览器的所有请求,就像它允许来自非浏览器工具(例如 Java 代码、curl 或 Postman 或其他工具)的所有请求一样(当然只要它们经过身份验证)并发送响应。

不同之处在于,当非基于浏览器的应用程序收到响应时,如果缺少响应,它不会拒绝您访问该响应Access-Control-Allow-Origin标头。但如果缺少响应,浏览器确实会拒绝让您的客户端 JavaScript Web 应用程序代码访问响应。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 javascript 调用 IBM Watson 服务 的相关文章

  • 专用网络:web3.eth.getAccounts() 始终发送空数组

    我正在运行一个私人以太坊网络 我确实用https aws amazon com blockchain templates 整个设置已经完成 AWS 上的设置看起来正确 现在 我正在尝试创建帐户并检索所有这些帐户 为此 我使用以下方法 Web
  • setInterval 内的返回值

    我想在 setInterval 内返回一个值 我只想以一定的时间间隔执行一些操作 这就是我尝试过的 function git limit var i 0 var git setInterval function console log i
  • 使用 Mockitos 传递参数化输入

    我正在使用 Mockito 进行单元测试 我想知道是否可以使用 Junit 测试中的方式发送参数化输入参数 e g InjectMocks MockClass mockClass new MockClass Test public void
  • 将 JavaScript 引擎嵌入到 .NET 中 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 只是想知道是否有人尝试过将任何 js 引擎嵌入并实际集成到 net 环境中 我可以找到并实际使用 经过L
  • 在同一台计算机上设置 JBoss 的多个实例

    我在 JBoss 社区中找到了下一页 http www jboss org community wiki ConfigurePorts http www jboss org community wiki ConfigurePorts 有下一
  • 在Java程序中计算zip文件的md5哈希值

    我有一个 zip 文件 在我的 Java 代码中我想计算 zip 文件的 md5 哈希值 有没有我可以用于此目的的 java 库 一些例子将非常感激 谢谢 几周前我通过这篇文章做到了这一点 http www javalobby org ja
  • Javascript 选择 onchange='this.form.submit()'

    我有一个带有选择和一些文本输入的表单 我希望在更改选择时提交表单 使用以下方法可以正常工作 onchange this form submit 但是 如果表单还包含提交按钮 则当选择更改时 表单不会提交 我猜有某种冲突 我在这里有什么选择
  • 如何强制初始化 Hibernate JPA 代理以在 JSON 调用中使用它

    我有一个 Spring 3 JPA 2 0 应用程序 在我的 Controller我需要一个初始化的对象 但我有代理 我需要能够以编程方式初始化它 我需要类似的功能org hibernate Hibernate initialize Obj
  • Java 8 Stream - 为什么过滤器方法不执行? [复制]

    这个问题在这里已经有答案了 我正在学习使用java流进行过滤 但是过滤后的流没有打印任何内容 我认为过滤器方法没有被执行 我的过滤代码如下 Stream of d2 a2 b1 b3 c filter s gt s startsWith b
  • Meteor.js 登录事件

    因此 我对 Meteor 框架和 JavaScript 总体来说还很陌生 但我正在使用该框架开发一个小项目 以尝试让自己达到标准 基本上我正在开发一个微博客网站 目前 用户可以通过多种服务登录 fb google 等 我通过插入所需 url
  • RTCDataChannel发送方法不发送数据

    我的 RTCDataChannel 遇到一个奇怪的问题 我正在对 WebRTC 进行一些研究 并且已经可以进行 WebRTC 音频 视频聊天 现在我想使用 RTCDataChannel 添加文本聊天和文件共享 我已经像这样创建了 RTCDa
  • Google App Engine数据存储区字符串编码问题

    你好 我正在使用 Google App Engine 进行一个项目 并且需要存储一些字符串 我正在使用 Java 和JDOHelper getPersistenceManagerFactory transactions optional 在
  • 从 SQL 语句中检索元数据(表名)

    我使用的是 Visual Studio 2008 我创建了一个 Winforms 应用程序 并且尝试从 SQL 语句中提取表名 con new SqlConnection connString String queryString Sele
  • Web服务连接超时和请求超时之间的区别

    WebClientTestService service new WebClientTestService int connectionTimeOutInMs 5000 Map
  • servlet 如何获取 servlet 之外的文件的绝对路径?

    我们一直在使用 System getProperties user dir 来获取属性文件的位置 现在它已经部署在 Tomcat 上 通过 servlet 系统调用将位置指定为 tomcat 而不是属性文件所在的位置 我们如何动态调用属性文
  • 使用 jQuery Tablesorter 操作后如何恢复当前页面?

    我正在使用 tablesorter 但无法找到有关插件 tablesorter 寻呼机的任何文档 问题是我有一个显示一些数据的表 并且在每一行中都有一个删除链接 该链接附加了要删除的元素的唯一标识符 显然 是否可以保存我正在删除的页面 然后
  • 使用 jQuery 修改 HTML 表格的结构

    我有一个元素列表 X在以下示例中 显示在 HTML 表格的行或列中 从 HTML 代码的角度来看 我有 水平显示 table tr td A td td B td td C td tr table 或 垂直显示 table tr td A
  • FullCalendar 检查选择日是否有活动?

    我正在使用 Full Calendar js 插件 到目前为止一切顺利 但我想检查开始和结束之间的选择是否有事件 我只需要返回 true 或 false 基本上 如果日期选择中已经存在事件 我想阻止用户创建事件 var calendar c
  • Serviceworker Bug event.respondWith

    我的 serviceworker 的逻辑是 当发生获取事件时 它首先获取包含一些布尔值 而不是 event request url 的端点 并根据我正在调用的值检查该值event respondWith 对于当前的获取事件 我正在提供来自缓
  • 使用 Lodash 将对象键转换为具有键值数量的数组[重复]

    这个问题在这里已经有答案了 我有一个产品对象 products bread 1 milk 2 cheese 2 chicken 1 我想要一个包含产品名称的数组 如下所示 products bread milk milk cheese ch

随机推荐

  • 使用 Windows 身份验证创建基于角色的授权

    我有一个 ASP NET Core 应用程序 我想在其中添加基于角色的身份验证 我使用 Windows 身份验证 因为它是一个 Intranet 应用程序 我已经有一个自定义数据库 其中包含坦率地说未映射到 IdentityFramewor
  • h1标签小于h2,全部在section标签内

    我的 h1 标签位于节标签内 比 h2 标签小 当 h1 标签位于部分标签之外时 其尺寸是正确的 我一直在浏览我的 CSS 页面 但没有发现任何可以实现这一点的东西 body font 100 1 4 Verdana Arial Helve
  • 方差分析无法进行多级分析 - “未为此 S4 类定义 $ 运算符”

    当尝试进行与多级分析相关的方差分析时 我在 R 中运行代码时遇到问题 我总是收到错误 未为此 S4 类定义 运算符 Model 0 Model without teams grand mean centered h2 0 gmc lt lm
  • Core-Plot:Interface Builder 文件中存在未知类 CPLayerHostingView

    Using 核心情节似乎不是一个容易的集成任务 标头路径已设置 在 Interface Builder 中我创建了一个CPLayerHostingView它属于由 Interface Builder 实例化的视图控制器 加载 nib 文件后
  • 6.0.0 版本中未安装 mongo.exe

    我从这里安装了 MongoDB 社区服务器link 但当我调查C Program Files MongoDB Server 6 0 bin 我无法找到 mongo exe 文件 我可以看到 mongod exe 和 mongos exe 有
  • C中的宏定义错误?

    define SOUND SPEED 0 034 int rtt round trip time in microsecond double distance distance double rtt SOUND SPEED 2 它抱怨错误
  • IE 忽略定位元素上的 Z-Index

    事实证明 IE 再次成为我生存的祸根 我正在开发的网站顶部有一个水平菜单 其中的一个项目会触发一个纯 CSS 菜单 该菜单绝对定位在父菜单 DIV 内 相对定位 这使得菜单可以完美地放置在 IE 和 W3C 兼容浏览器中 当我在页面下方有更
  • 在 C# 中使用 Windows 窗体隐藏/阻止选项卡

    问题是我有一个 登录窗口 和一个 主窗口 在按下登录按钮或 访客 按钮后调用 如果按登录按钮 整个系统都会出来 如果我按访客按钮 一个选项卡应该消失或被阻止或其他什么 private void visitant object sender
  • 按周/月//季度/年分区以突破分区限制?

    我有 32 年的数据想要放入分区表中 但是 BigQuery 说我超出了限制 4000 个分区 对于这样的查询 CREATE TABLE deleting day partition PARTITION BY FlightDate AS S
  • ClickOnce 和 .NET 5:用户设置未更新

    我已将我的一个 WPF 应用程序从 NET Framework 4 7 更新到 NET 5 它使用 ClickOnce 安装程序来安装更新 自从更改为 NET 5 以来 我使用 AssemblyVersion 来设置版本 而不是依赖 Cli
  • 如何命名一组类型边界? [复制]

    这个问题在这里已经有答案了 如果我有一长串必须在很多地方重复的类型界限 我该如何给它们命名 例如 如果不是 fn foo
  • 如何获取CSS类中元素的属性集

    我想读取元素的高度和宽度 div style width 50px div div class big div For box01我可以用height getElementById box01 style height 没关系 但对于 bo
  • 我在 Consumer 内部收到 NullPointerException

    我正在尝试生产者 消费者问题 但我不知道为什么我会遇到这样的问题java lang NullPointerException在消费者内部 package com import java util concurrent PriorityBlo
  • 使用 HTML Canvas 创建反射图像?

    我有以下代码 尝试将垂直镜像图像与透明背景颜色渐变结合起来 当组合这两种效果时 它失败了 我是否需要在画布上覆盖 PNG 渐变 而不是尝试让画布执行这两种操作
  • 从命令行进行 MariaDB 备份

    开发者控制台中用于创建备份的备份功能非常棒 然而 我希望能够实现自动化 有没有办法从 cf 命令行应用程序执行此操作 Thanks 这是不可能从cf cli 但是有一个API端点用于触发备份 API 文档 自定义扩展 Swisscom 应用
  • 导航到流。使用什么 URI(如果有)来解析相对链接?

    我有一个 WPF 应用程序 它使用
  • Laravel Vagrant Up SSH 问题

    我正在尝试在 homestead vagrant 的帮助下创建一个 Laravel 应用程序 我使用的是Windows 7开发环境 我正在使用按项目安装 并且在 Laravel 文档中我可以流浪我的项目 当我在项目中流浪时 我会陷入困境 S
  • 使用 Symfony DI 容器的原则 2

    我正在开发一个利用 Doctrine 2 的 Zend Framework 项目 我试图让 Symfony 的 DI 容器也与该项目一起工作 但我遇到了麻烦 假设我有一个类 Foo 需要注入两个实例 我可以毫无问题地设置一个 Symfony
  • 使用 lodash/Javascript 对数字数组进行排序

    我有一个字符串数组 如下所示 let arr 1 1 1 2 2 3 3 2 3 4 10 我想要如下的预期输出 1 1 1 2 2 2 3 3 3 4 10 我尝试了下面的代码 但它没有给我正确的结果 let arr 1 1 1 2 2
  • 如何从 javascript 调用 IBM Watson 服务

    我正在使用 IBM Watson 服务实现虚拟代理 我的应用程序是使用 Jquery Angular JS 和 Java 开发的 目前我正在从 java 中间层调用 watson 服务 但我想避免这种情况并直接从 javascript 调用