okhttp java.lang.Illegal ArgumentException: unexpected url



我使用 okhttp 与微服务交互,昨晚我收到java.lang.Illegal ArgumentException: unexpected url: http://dd.zydtrip.net:7080/api/device/bike/heartbeat这样的错误

服务正常运行 30 分钟后引发异常。此 URL 应该是正常的。该异常目前无法重现。为什么要抛出此异常?我使用的版本是 3.3.1

return new Request.Builder().url(url) .addHeader("Content-Type", contentType) .post(RequestBody.create(MediaType.parse("charset=utf-8"), reqMsg.encode())) .build();

错误是:

23:18:36,105 ERROR BikeMessageReceiver:41 - unexpected url: http://dd.zydtrip.net:7080/api/device/bike/heartbeat
java.lang.IllegalArgumentException: unexpected url: http://dd.zydtrip.net:7080/api/device/bike/heartbeat
        at okhttp3.Request$Builder.url(Request.java:141)
        at com.ziytek.bike.access.utils.ServiceInteract.getRequest(ServiceInteract.java:76)
        at com.ziytek.bike.access.utils.ServiceInteract.sendMessage(ServiceInteract.java:106)
        at com.ziytek.bike.access.service.DeviceService.sendHeartBeat(DeviceService.java:98)
        at com.ziytek.bike.access.impl.BikeMessage300Receiver.handleMessageSpecific(BikeMessage300Receiver.java:58)
        at com.ziytek.bike.access.BikeMessageReceiver.handleMessage(BikeMessageReceiver.java:28)
        at com.ziytek.message.exchange.impl.AbstractUMForwarder.handleRequestMessage(AbstractUMForwarder.java:140)
        at com.ziytek.message.exchange.impl.AbstractUMForwarder.forwardMessage(AbstractUMForwarder.java:53)
        at com.ziytek.message.exchange.impl.AbstractUMForwarder$MessageTask.run(AbstractUMForwarder.java:97)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
如果您

使用的是旧版本(3.3.1),则很难解决您的问题,因为最新版本现在是3.12.1,并且Request.java的源代码已经发生了重大变化。

在其当前迭代中,该类不再引发unexpected url错误消息。

源代码:https://github.com/square/okhttp/blob/master/okhttp/src/main/java/okhttp3/Request.java#L141

无论如何,我在http://dd.zydtrip.net:7080/api/device/bike/heartbeat上为您进行了URL验证,它似乎是有效的。这是使用 org.apache.commons.validator.UrlValidator 类完成的。

我的建议是确保您使用的是最新的库,然后重新运行以查看结果。这将使调试更容易。

最新更新