GithubHelp home page GithubHelp logo

liyupi / yucongming-java-sdk Goto Github PK

View Code? Open in Web Editor NEW
173.0 5.0 22.0 623 KB

鱼聪明 AI 的 Java SDK,几行代码使用 AI 助手能力!

Home Page: https://www.yucongming.com

Java 100.00%
ai java programmer sdk

yucongming-java-sdk's Introduction

鱼聪明 Java SDK

基于 Spring Boot Starter 开发,只需一行代码,使用强大的 AI 能力!

鱼聪明 AI:https://yucongming.com

官方公众号:鱼聪明AI

快速开始

0、引入 sdk

<dependency>
    <groupId>com.yucongming</groupId>
    <artifactId>yucongming-java-sdk</artifactId>
    <version>0.0.3</version>
</dependency>

1、在 鱼聪明 AI 开放平台 获取开发者密钥对

2、初始化 YuCongMingClient 对象

方法 1:自主 new 对象

String accessKey = "你的 accessKey";
String secretKey = "你的 secretKey";
YuCongMingClient client = new YuCongMingClient(accessKey, secretKey);

方法 2:通过配置注入对象

修改配置:

yuapi:
  client:
    access-key: 你的 access-key
    secret-key: 你的 secret-key

使用客户端对象:

@Resource
private YuCongMingClient client;

3、构造请求参数

DevChatRequest devChatRequest = new DevChatRequest();
devChatRequest.setModelId(1651468516836098050L);
devChatRequest.setMessage("鱼皮");

4、获取响应结果

BaseResponse<DevChatResponse> response = client.doChat(devChatRequest);
System.out.println(response.getData());

API 文档

AI 对话

方法名:doChat

请求参数:

  • modelId:使用的会话模型(助手)id
  • message:要发送的消息,不超过 1024 字

响应结果:

  • code:响应状态码
  • data:
    • content:对话结果内容
  • message:响应信息

示例代码:

// 构造请求
DevChatRequest devChatRequest = new DevChatRequest();
devChatRequest.setModelId(1651468516836098050L);
devChatRequest.setMessage("鱼皮");

// 获取响应
BaseResponse<DevChatResponse> response = client.doChat(devChatRequest);
System.out.println(response.getData());

模型(助手):

设置自己的模型(助手)可以使AI的回答更加个性化,如 “1651468516836098050” 这个模型(助手)id会更加倾向于回答歌曲和歌单,你可以通过平台首页的 “创建助手” 和 “我的助手” 功能来创建、查看和修改模型(助手),查看模型(助手)即可看到模型(助手)id。

Http 接入

  1. 获取 AccessKeySecretKey

  2. 请求信息

    URL :https://www.yucongming.com/api/dev/chat 请求方法:POST 请求头:

    请求头名称 示例值
    accessKey accessKey 9vtw6bx8eh65uu5q62a8nhqdjf2asapp
    nonce 四位随机整数 1234
    body 请求参数的 md5 加密值,请求参数详情见下方 cf2623df4bf9d0485b0ab9392cbcef11
    timestamp 当前时间戳(单位秒) 1687775370
    sign 签名,详情见下方 d10ce4n429778060c0af1d5f3f388d39953e74d996022e6182094fa3a84adbe9
  3. 请求参数

    modelId 模型(助手)id
    message 消息(问题)
  4. 签名认证

    签名的值是 请求参数的 md5 加密值 + . + SecretKey 的值进行 SHA256 加密

  5. 示例代码( Python )

    import hashlib
    import time
    import random
    import requests
    import json
    
    
    class DevChatRequest:
        def __init__(self, model_id, message: str):
            self.model_id = model_id
            self.message = message
    
        def to_dict(self):
            return {
                "modelId" : self.model_id,
                "message" : self.message
            }
    
    class YuCongMingClient:
        HOST = 'https://www.yucongming.com/api/dev'
    
        def __init__(self, access_key, secret_key):
            self.access_key = access_key
            self.secret_key = secret_key
    
        def do_chat(self, dev_chat_request: DevChatRequest):
            url = self.HOST + '/chat'
            json_data = json.dumps(dev_chat_request.to_dict())
            headers = self.get_headers(json_data)
            response = requests.post(url, headers=headers, data=json_data)
            return response.json()
    
        def get_headers(self, json_data):
            encode_body = self.encode_body(json_data)
            headers = {
                'Content-Type': 'application/json',
                'accessKey': self.access_key,
                'nonce': self.generate_nonce(),
                'body': encode_body,
                'timestamp': str(int(time.time())),
                'sign': self.generate_sign(encode_body)
            }
            return headers
    
        def generate_nonce(self):
            return str(random.randint(1000, 9999))
    
        def encode_body(self, json_data):
            md5 = hashlib.md5()
            md5.update(json_data.encode('utf-8'))
            return md5.hexdigest()
    
        def generate_sign(self, json_data):
            sha256 = hashlib.sha256()
            sign_str = json_data + "." +self.secret_key
            sha256.update(sign_str.encode('utf-8'))
            return sha256.hexdigest()
    
    
    if __name__ == '__main__':
        accessKey = "你的 accessKey";
        secretKey = "你的 secretKey";
        ycmc = YuCongMingClient(accessKey, secretKey)
        print(ycmc.do_chat(DevChatRequest("1651468516836098050", "鱼皮")))
  6. 返回状态码

    Code Message 解释
    0 ok

    | | 40000 | 请求参数错误 | 检查参数名是否匹配、长度是否符合要求等 | | 40100 | 未登录 | | | 40101 | 无权限 | 可能是由nonce、timestamp、sign 异常引起 | | 40400 | 请求数据不存在 | ak、模型等不存在 | | 40300 | 禁止访问 | 账号状态异常等 | | 50000 | 系统内部异常 | 网络抖动,数据库操作失败等 | | 50001 | 操作失败 | 限流等 |

yucongming-java-sdk's People

Contributors

co-pine avatar dy56go avatar liyupi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

yucongming-java-sdk's Issues

问问题,却回复了歌单

使用SDK回答问题,有些时候特别倾向于回答歌单,就是答非所问,如下,我提问“一个后台管理系统通用的功能有哪些?”,直接回复了歌单,但是偶尔会回复正确,在鱼聪明平台上提问就没有这种回复歌单的问题。
`
message: 一个后台管理系统通用的功能有哪些?
answer: 播放清单名称:Sunset Vibes

播放清单描述:在这个播放清单中,我为你精选了一些与给定歌曲相似的轻柔、悠扬的歌曲,让你感受到日落时分最美妙的氛围。

播放清单歌曲:

  1. "Photograph" - Ed Sheeran
  2. "Say You Won't Let Go" - James Arthur
  3. "A Thousand Years" - Christina Perri
  4. "Lucky" - Jason Mraz ft. Colbie Caillat
  5. "Like I'm Gonna Lose You" - Meghan Trainor ft. John Legend
  6. "Hallelujah" - Leonard Cohen
  7. "Home" - Edward Sharpe & The Magnetic Zeros
  8. "Ho Hey" - The Lumineers
  9. "Lost Stars" - Adam Levine
  10. "The A Team" - Ed Sheeran
    `

觉得取出content比较麻烦,应该是我太菜,尝试了很多方法都不行

最后发现是doChat这个方法没有完全转为泛型BaseResponse,导致取出数据很困难,getData()取出的数据无法存储,无法判断类型,不能进行后续操作。
下面是我的解决方法:

    public BaseResponse<DevChatResponse> doChat(DevChatRequest devChatRequest) {
        String url = HOST + "/chat";
        String json = JSONUtil.toJsonStr(devChatRequest);
        String result = HttpRequest.post(url)
                .addHeaders(getHeaderMap(json))
                .body(json)
                .execute()
                .body();
        TypeReference<BaseResponse<DevChatResponse>> typeReference = new TypeReference<BaseResponse<DevChatResponse>>() {};
        return JSONUtil.toBean(result, typeReference.getType(), false);
    }

但是devChatResponseBaseResponse展示数据不是很美观了,也缺少灵活性了😂
测试代码:

    public static void main(String[] args) {
        String accessKey = "";
        String secretKey = "";
        YuCongMingClient yuCongMingClient = new YuCongMingClient(accessKey, secretKey);
        DevChatRequest devChatRequest = new DevChatRequest();
        devChatRequest.setModelId(1651468516836098050L);
        devChatRequest.setMessage("创建一个邓紫棋的歌曲播放清单");
        BaseResponse<DevChatResponse> devChatResponseBaseResponse = yuCongMingClient.doChat(devChatRequest);
        System.out.println("devChatResponseBaseResponse:\n" + JSONUtil.toJsonStr(devChatResponseBaseResponse));
        System.out.println("================================================");
        String content = devChatResponseBaseResponse.getData().getContent();
        System.out.println("content:\n" + content);

    }

image

用Python编写了一套sdk, 返回500 系统错误

写了个python的sdk,仓库在这 https://github.com/Shane-hcker/yucongming-python-sdk
报错描述如下:

data = self.get_data(json_)
parsed_data = uparse.urlencode(data, encoding='utf-8').encode('utf-8')

headers = {'Content-Type': 'application/json'}

context = ssl._create_unverified_context()
# fixme --> 500 Systematic Error
request = urequests.Request(url, parsed_data, headers, method='POST')
res = urequests.urlopen(request, context=context)

请求后返回结果:{code:50000, data:None, message:系统错误}

自动装配类路径错误

spring boot starter

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.yupi.yucongming.dev.YuCongMingClientConfig

应该是

spring boot starter

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.yupi.yucongming.dev.client.YuCongMingClientConfig

本地开发时使用没有问题,但是在线上环境调用出现cn.hutool.http.HttpException: Unexpected end of file from server

cn.hutool.http.HttpException: Unexpected end of file from server
at cn.hutool.http.HttpResponse.init(HttpResponse.java:511) ~[hutool-all-5.8.8.jar!/:na]
at cn.hutool.http.HttpResponse.initWithDisconnect(HttpResponse.java:484) ~[hutool-all-5.8.8.jar!/:na]
at cn.hutool.http.HttpResponse.(HttpResponse.java:81) ~[hutool-all-5.8.8.jar!/:na]
at cn.hutool.http.HttpRequest.doExecute(HttpRequest.java:1146) ~[hutool-all-5.8.8.jar!/:na]
at cn.hutool.http.HttpRequest.execute(HttpRequest.java:1013) ~[hutool-all-5.8.8.jar!/:na]
at cn.hutool.http.HttpRequest.execute(HttpRequest.java:989) ~[hutool-all-5.8.8.jar!/:na]
at com.yupi.yucongming.dev.client.YuCongMingClient.doChat(YuCongMingClient.java:48) ~[yucongming-java-sdk-0.0.3.jar!/:0.0.3]
at com.jmx.menstrual.service.impl.ChatServiceImpl.chatResponse(ChatServiceImpl.java:31) ~[classes!/:0.0.1-SNAPSHOT]
at com.jmx.menstrual.service.impl.ChatServiceImpl$$FastClassBySpringCGLIB$$f33c2917.invoke() ~[classes!/:0.0.1-SNAPSHOT]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.22.jar!/:5.3.22]
at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) ~[spring-aop-5.3.22.jar!/:5.3.22]
at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) ~[spring-aop-5.3.22.jar!/:5.3.22]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) ~[spring-aop-5.3.22.jar!/:5.3.22]
at com.jmx.menstrual.service.impl.ChatServiceImpl$$EnhancerBySpringCGLIB$$c49a36d4.chatResponse() ~[classes!/:0.0.1-SNAPSHOT]
at com.jmx.menstrual.controller.ChatController.chat(ChatController.java:49) ~[classes!/:0.0.1-SNAPSHOT]
at com.jmx.menstrual.controller.ChatController$$FastClassBySpringCGLIB$$1e4c88b7.invoke() ~[classes!/:0.0.1-SNAPSHOT]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.22.jar!/:5.3.22]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) ~[spring-aop-5.3.22.jar!/:5.3.22]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.22.jar!/:5.3.22]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) ~[spring-aop-5.3.22.jar!/:5.3.22]
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89) ~[spring-aop-5.3.22.jar!/:5.3.22]
at com.jmx.menstrual.aop.LogInterceptor.doInterceptor(LogInterceptor.java:48) ~[classes!/:0.0.1-SNAPSHOT]
at sun.reflect.GeneratedMethodAccessor83.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_121]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_121]
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634) ~[spring-aop-5.3.22.jar!/:5.3.22]
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624) ~[spring-aop-5.3.22.jar!/:5.3.22]
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72) ~[spring-aop-5.3.22.jar!/:5.3.22]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.22.jar!/:5.3.22]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) ~[spring-aop-5.3.22.jar!/:5.3.22]
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89) ~[spring-aop-5.3.22.jar!/:5.3.22]
at com.jmx.menstrual.aop.AuthInterceptor.doInterceptor(AuthInterceptor.java:66) ~[classes!/:0.0.1-SNAPSHOT]
at sun.reflect.GeneratedMethodAccessor101.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_121]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_121]
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634) ~[spring-aop-5.3.22.jar!/:5.3.22]
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624) ~[spring-aop-5.3.22.jar!/:5.3.22]
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72) ~[spring-aop-5.3.22.jar!/:5.3.22]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) ~[spring-aop-5.3.22.jar!/:5.3.22]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) ~[spring-aop-5.3.22.jar!/:5.3.22]
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-5.3.22.jar!/:5.3.22]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.22.jar!/:5.3.22]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) ~[spring-aop-5.3.22.jar!/:5.3.22]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) ~[spring-aop-5.3.22.jar!/:5.3.22]
at com.jmx.menstrual.controller.ChatController$$EnhancerBySpringCGLIB$$2ebc420f.chat() ~[classes!/:0.0.1-SNAPSHOT]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_121]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_121]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_121]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_121]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.22.jar!/:5.3.22]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.22.jar!/:5.3.22]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.22.jar!/:5.3.22]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.22.jar!/:5.3.22]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.22.jar!/:5.3.22]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.22.jar!/:5.3.22]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1070) ~[spring-webmvc-5.3.22.jar!/:5.3.22]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.22.jar!/:5.3.22]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) [spring-webmvc-5.3.22.jar!/:5.3.22]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) [spring-webmvc-5.3.22.jar!/:5.3.22]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) [tomcat-embed-core-9.0.65.jar!/:na]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) [spring-webmvc-5.3.22.jar!/:5.3.22]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) [tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) [tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) [tomcat-embed-websocket-9.0.65.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.65.jar!/:na]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) [spring-web-5.3.22.jar!/:5.3.22]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) [spring-web-5.3.22.jar!/:5.3.22]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.65.jar!/:na]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) [spring-web-5.3.22.jar!/:5.3.22]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) [spring-web-5.3.22.jar!/:5.3.22]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.65.jar!/:na]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) [spring-web-5.3.22.jar!/:5.3.22]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) [spring-web-5.3.22.jar!/:5.3.22]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) [tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) [tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) [tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) [tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) [tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) [tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890) [tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1789) [tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) [tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.65.jar!/:na]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_121]
Caused by: java.net.SocketException: Unexpected end of file from server
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:792) ~[na:1.8.0_121]
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:647) ~[na:1.8.0_121]
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:789) ~[na:1.8.0_121]
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:647) ~[na:1.8.0_121]
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1569) ~[na:1.8.0_121]
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474) ~[na:1.8.0_121]
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480) ~[na:1.8.0_121]
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:338) ~[na:1.8.0_121]
at cn.hutool.http.HttpConnection.responseCode(HttpConnection.java:474) ~[hutool-all-5.8.8.jar!/:na]
at cn.hutool.http.HttpResponse.init(HttpResponse.java:508) ~[hutool-all-5.8.8.jar!/:na]
... 94 common frames omitted

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.