当前位置: 首页 > 知识库问答 >
问题:

使用Java API中的代理设置的IBM Watson对话服务

麻和雅
2023-03-14

我已经使用IBM Watson开发并部署了一个对话服务。我可以使用IBM Watson API explorer访问我的服务。我尝试使用Java API连接服务,如中所述https://developer.ibm.com/recipes/tutorials/integration-of-ibm-watson-conversation-service-to-your-java-application/我在一个公司网络上工作,所以使用代理访问互联网。现在我无法从Java API访问该服务。我正在犯错误。

Exception in thread "main" java.lang.RuntimeException: java.net.ConnectException: Failed to connect to gateway.watsonplatform.net/169.48.66.222:443
    at com.ibm.watson.developer_cloud.service.WatsonService$1.execute(WatsonService.java:182)
    at com.chat.CustomerChat.conversationAPI(CustomerChat.java:47)
    at com.chat.CustomerChat.main(CustomerChat.java:32)
Caused by: java.net.ConnectException: Failed to connect to gateway.watsonplatform.net/169.48.66.222:443
    at okhttp3.internal.io.RealConnection.connectSocket(RealConnection.java:187)
    at okhttp3.internal.io.RealConnection.buildConnection(RealConnection.java:170)
    at okhttp3.internal.io.RealConnection.connect(RealConnection.java:111)
    at okhttp3.internal.http.StreamAllocation.findConnection(StreamAllocation.java:187)
    at okhttp3.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:123)
    at okhttp3.internal.http.StreamAllocation.newStream(StreamAllocation.java:93)
    at okhttp3.internal.http.HttpEngine.connect(HttpEngine.java:296)
    at okhttp3.internal.http.HttpEngine.sendRequest(HttpEngine.java:248)
    at okhttp3.RealCall.getResponse(RealCall.java:243)
    at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:201)
    at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:163)
    at okhttp3.RealCall.execute(RealCall.java:57)

How do we set proxy connection in IBM watson Connection service?

My code:(Modified the user credentials and workspace id here)

        ConversationService service = new ConversationService("2017-05-26");
        service.setUsernameAndPassword("dfgdfg-578a-46b6-55hgg-ghgg4343", "ssdsd455gfg");
        MessageRequest newMessage = new MessageRequest.Builder().inputText(input).context(context).build();
        String workspaceId = "fgfdgfgg-ce7a-422b-af23-gfgf56565";
        MessageResponse response = service.message(workspaceId, newMessage).execute();

共有2个答案

滑弘扬
2023-03-14

经过IBMAPI留档,我发现下面的方法来设置代理。它应该工作。

HttpConfigOptions config = new HttpConfigOptions
                .Builder()
                .proxy(new Proxy(Proxy.Type.HTTP,
                                 new InetSocketAddress("<Proxy IP>", <Proxy Port>)))
                .build();
service.configureClient(config);

我用JavaSDK6.14.0实现了这段代码。IBM已停止使用此版本SDK中的ConversationService软件包和弃用的Conversation软件包。相反,推出了助手套餐。我的工作代码如下。

    Assistant service = null;
    Context context = null;

    if (watsonUser.equalsIgnoreCase(APIKEY_AS_USERNAME))
    {
        IamOptions iamOptions = new IamOptions.Builder().apiKey(watsonApikey).build();
        service = new Assistant(watsonVersion, iamOptions);
    }
    else
    {
        service = new Assistant(watsonVersion, watsonUser,watsonPassword);
    }

    service.setEndPoint(watsonUrl);
    if(watsonProxy != null)
    {
        HttpConfigOptions config = new HttpConfigOptions
                .Builder()
                .proxy(new Proxy(Proxy.Type.HTTP,
                                 new InetSocketAddress(watsonProxyIP, watsonProxyPort)))
                .build();
        service.configureClient(config);
    }


    String workspaceId = watsonWorkspace_id;

    InputData input = new InputData.Builder(inputStr).build();

    MessageOptions options = new MessageOptions.Builder(workspaceId)
    .context(context)
      .input(input)
      .build();

    MessageResponse response = service.message(options).execute();
    context = response.getContext();

我已经用基于对话包的实现检查了代码。它起作用了。我不能用问题中给出的代码进行检查,因为当前SDK中不再有对话服务包。

经福
2023-03-14

不完全确定Java的解决方案,但当我在Node上遇到类似问题时,我必须设置代理变量,这很有帮助。我建议您尝试在eclipse和JVM中设置代理变量。而且我认为这个Java文件一定很有帮助。

 类似资料:
  • 本文向大家介绍使用nginx设置代理服务器,包括了使用nginx设置代理服务器的使用技巧和注意事项,需要的朋友参考一下 nginx可以利用其反向代理的功能来进行负载均衡的实现,同时也可以使用其正向代理的功能设置代理服务器,比如在内网的环境中,在可以连接外网的机器上运行nginx作为代理服务器,其他机器通过设定此台机器的IP和port即可通过其连接上网,本文使用nginx官方镜像,通过如下步骤即可简

  • 说明 当前文档是在H5 JS SDK的设置代理服务器基础之上进行的补充,请先查看H5 JS SDK中设置代理服务器的相关配置,根据H5 JS SDK配置完成之后,再继续根据当前文档进行配置。 Nginx代理服务器配置的补充 配置HTTPS 注意:应替换整个[xxx]形式,包括[]。 server { listen 443 ssl; server_name [域名];

  • 为解决浏览器中请求不同域名下的Linkface公有云接口,需要通过代理服务器进行代理转发。在代理服务器中我们可以加API_ID和API_SECRET包含在请求链接中,从而提高了客户账户的安全性。 由于在实际部署的时候,代理服务器和部署H5的服务器往往不会同域,所以用户可以在代理服务器上开启CORS。 也就是说,设置代理服务器主要是为了提高安全性以及解决前端js sdk跨域问题。 需要代理的接口列表

  • 问题内容: 如何使用使用selenium和谷歌浏览器的代理服务器?我附加了代码,但不确定是否会更改实际的代理服务器。 问题答案:

  • 使用JavaAPI设置源和设置的唯一方法是使用这样的代码(这是一个只有一个@test方法的简单测试类): 当我第一次运行它时,它就起作用了。但当我第二次运行它时,我得到: JAVAlang.IllegalStateException:未能加载ApplicationContext allable.java:12DefaultCacheAware ContextLoaderDorg.springfra

  • 我的应用程序需要从Web获取一个XML文件,如下所示: 我正在使用过滤网络工作,因此应用程序无法检索该文件。 有一种方法来设置HTTP代理(例如)在Spring Boot? 或者,我可以使用HTTPS协议检索XML文件,但我应该正确设置元数据提供程序,以支持加密连接...怎样?