OKhttp 使用Interceptor时报错java.lang.IllegalStateException: closed(转载)

本文介绍了一个关于OkHttp网络请求中使用Interceptor时出现的错误及其解决方法。问题在于response.body().string()只能被调用一次,解决办法是通过response.newBuilder().build()创建一个克隆对象来避免该限制。

原文链接:点击打开链接

===============================================================================================

1、问题 :Okhttp 网络请求使用Interceptor拦截器后报错,原因是response.body().string()只能调用一次,调用一次后io流会close,再次调用response.body().string()就会报错java.lang.IllegalStateException: closed。

在自定义的Interceptor调用了response.body().string()一次,在CallBack又调用了一次,故报错失败。。。

2、解决方式:

查看鸿神在OkhttpUtils框架中的LoggerInterceptor源码发现,在获取到响应结果Response后

使用

	response.newBuilder().build()得到Response的克隆对象,里面的内容和原Response对象完全一致,用克隆对象来输出log,完美解决。
2025-08-29 17:28:08 [XNIO-1 task-2] INFO o.r.c.w.i.PlusWebInvokeTimeInterceptor - 域名信息:localhost 2025-08-29 17:28:08 [XNIO-1 task-2] DEBUG o.r.c.w.i.PlusWebInvokeTimeInterceptor - [PLUS]开始请求 => URL[POST /chat/send],参数类型[json],参数:[{"max_tokens":1024,"model":"qwen:7b","temperature":0.5,"top_p":1,"presence_penalty":0,"frequency_penalty":0,"messages":[{"content":"你好","role":"user"},{"content":"\n失败原因:\n```\n{\n \"statusCode\": 500,\n \"statusText\": \"Internal Server Error\",\n \"reason\": \"\"\n}\n```\n","role":"assistant"},{"role":"user","content":"你好"}],"stream":true,"kid":"","chat_type":0,"appId":"","reason":true}] 2025-08-29 17:28:08 [OkHttp http://127.0.0.1:11434/...] INFO o.r.c.c.o.interceptor.OpenAILogger - OkHttp-------->:--> POST http://127.0.0.1:11434/api/chat 2025-08-29 17:28:08 [OkHttp http://127.0.0.1:11434/...] INFO o.r.c.c.o.interceptor.OpenAILogger - OkHttp-------->:Content-Type: application/json; charset=utf-8 2025-08-29 17:28:08 [OkHttp http://127.0.0.1:11434/...] INFO o.r.c.c.o.interceptor.OpenAILogger - OkHttp-------->:Content-Length: 703 2025-08-29 17:28:08 [OkHttp http://127.0.0.1:11434/...] INFO o.r.c.c.o.interceptor.OpenAILogger - OkHttp-------->:Accept: text/event-stream 2025-08-29 17:28:08 [OkHttp http://127.0.0.1:11434/...] INFO o.r.c.c.o.interceptor.OpenAILogger - OkHttp-------->:--> END POST 2025-08-29 17:28:16 [OkHttp http://127.0.0.1:11434/...] INFO o.r.c.c.o.interceptor.OpenAILogger - OkHttp-------->:<-- 200 OK http://127.0.0.1:11434/api/chat (8464ms) 2025-08-29 17:28:16 [OkHttp http://127.0.0.1:11434/...] INFO o.r.c.c.o.interceptor.OpenAILogger - OkHttp-------->:Content-Type: application/x-ndjson 2025-08-29 17:28:16 [OkHttp http://127.0.0.1:11434/...] INFO o.r.c.c.o.interceptor.OpenAILogger - OkHttp-------->:Date: Fri, 29 Aug 2025 09:28:16 GMT 2025-08-29 17:28:16 [OkHttp http://127.0.0.1:11434/...] INFO o.r.c.c.o.interceptor.OpenAILogger - OkHttp-------->:Transfer-Encoding: chunked 2025-08-29 17:28:16 [OkHttp http://127.0.0.1:11434/...] INFO o.r.c.c.o.interceptor.OpenAILogger - OkHttp-------->:<-- END HTTP 2025-08-29 17:28:25 [OkHttp http://127.0.0.1:11434/...] ERROR o.r.c.l.SSEEventSourceListener - OpenAI sse连接异常data:{"model":"qwen:7b","created_at":"2025-08-29T09:28:16.7434007Z","message":{"role":"assistant","content":"你好"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:16.9545225Z","message":{"role":"assistant","content":"!"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:17.1614775Z","message":{"role":"assistant","content":"有什么"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:17.3553445Z","message":{"role":"assistant","content":"我可以"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:17.542726Z","message":{"role":"assistant","content":"帮助"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:17.7402078Z","message":{"role":"assistant","content":"你的"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:17.9177328Z","message":{"role":"assistant","content":"吗"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:18.1151543Z","message":{"role":"assistant","content":"?"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:18.2985262Z","message":{"role":"assistant","content":"无论"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:18.5010421Z","message":{"role":"assistant","content":"你"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:18.6975741Z","message":{"role":"assistant","content":"有关"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:18.9019635Z","message":{"role":"assistant","content":"于"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:19.0868755Z","message":{"role":"assistant","content":"纪检"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:19.2805004Z","message":{"role":"assistant","content":"工作的"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:19.471839Z","message":{"role":"assistant","content":"疑问"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:19.6675695Z","message":{"role":"assistant","content":","},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:19.867687Z","message":{"role":"assistant","content":"还是"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:20.0829743Z","message":{"role":"assistant","content":"需要"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:20.2800586Z","message":{"role":"assistant","content":"一些"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:20.4765804Z","message":{"role":"assistant","content":"指导"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:20.6691867Z","message":{"role":"assistant","content":"和"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:20.873668Z","message":{"role":"assistant","content":"建议"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:21.0829428Z","message":{"role":"assistant","content":","},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:21.2929978Z","message":{"role":"assistant","content":"我"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:21.5004959Z","message":{"role":"assistant","content":"都会"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:21.7489106Z","message":{"role":"assistant","content":"尽力"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:21.9970066Z","message":{"role":"assistant","content":"提供"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:22.2506169Z","message":{"role":"assistant","content":"支持"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:22.502783Z","message":{"role":"assistant","content":"。"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:22.7564248Z","message":{"role":"assistant","content":"请"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:23.0062765Z","message":{"role":"assistant","content":"告诉我"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:23.267141Z","message":{"role":"assistant","content":"你需要"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:23.5220655Z","message":{"role":"assistant","content":"哪"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:23.7739382Z","message":{"role":"assistant","content":"方面的"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:24.0231655Z","message":{"role":"assistant","content":"信息"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:24.27457Z","message":{"role":"assistant","content":"或"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:24.5266251Z","message":{"role":"assistant","content":"协助"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:24.7777456Z","message":{"role":"assistant","content":"。"},"done":false} {"model":"qwen:7b","created_at":"2025-08-29T09:28:25.0274074Z","message":{"role":"assistant","content":""},"done_reason":"stop","done":true,"total_duration":16712431400,"load_duration":7740811000,"prompt_eval_count":132,"prompt_eval_duration":673440000,"eval_count":39,"eval_duration":8283262000} ,异常:{} java.lang.IllegalStateException: Invalid content-type: application/x-ndjson at okhttp3.internal.sse.RealEventSource.processResponse(RealEventSource.kt:60) at okhttp3.internal.sse.RealEventSource.onResponse(RealEventSource.kt:46) at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.lang.Thread.run(Thread.java:842)
最新发布
08-30
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值