java - IBM Watson 无法在企业网络中工作

标签 java ibm-watson watson-conversation

我用 java 编写了一个连接到 IBM Watson Assistant API 的代码片段。 该代码在我的家庭网络中运行良好,但在尝试在公司网络中运行时出现以下错误。我在调用API之前已经设置了代理:

System.getProperties().put("https.proxyHost", ip);
System.getProperties().put("https.proxyPort", port);
System.getProperties().put("https.proxyUser", user);
System.getProperties().put("https.proxyPassword", pwd);

当我打印端点时,我得到以下数据:

URL-->https://gateway.watsonplatform.net/assistant/api

错误:

java.lang.RuntimeException: java.io.IOException: Failed to authenticate with proxy
    at com.ibm.watson.developer_cloud.service.WatsonService$WatsonServiceCall.execute(WatsonService.java:478)
    at com.fca.pd.chatbot.WatsonConversationApi.watsonService(WatsonConversationApi.java:162)
    at com.fca.pd.chatbot.WatsonConversationApi.doPost(WatsonConversationApi.java:73)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)

最佳答案

您需要使用OkHttp客户端配置

以下是使用助理服务的完整示例:

Assistant service = new Assistant("2018-02-16") {
  @Override
  protected OkHttpClient configureHttpClient() {
    Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("proxyHost", "proxyPort"));
    return super.configureHttpClient().newBuilder().proxy(proxy).build();
  }
};

service.setUsernameAndPassword("<username>", "<password>");

WorkspaceCollection workspaces = service.listWorkspaces().execute();
System.out.println(workspaces);

确保替换“proxyHost”“proxyPort”

有关如何设置代理的更多信息,请查看OkHTTPClient Proxy authentication how to?

关于java - IBM Watson 无法在企业网络中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51196860/

相关文章:

Node.js - 结合 IBM Watson Discovery 和 Conversation Services

java - Java 中二维 int 数组优化的洪水填充

java - SparkJava JOOQ 使用 Guice 进行依赖注入(inject)

.ts 文件中的 Java BufferedImages

java - Spring 集成 - 更少的样板?

java - Watson 文本转语音功能在 Chrome 中无法运行

python - Bluemix Python App启动失败

ibm-cloud - Watson 视觉识别错误 400 : cannot execute learning task: no classifier name given

watson-conversation - 如何在 Watson Conversation Service 的上下文中指定 "today' s 日期

ibm-watson - 我们如何从后端为 IBM Watson 设置上下文变量