我使用 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
类完成的。
我的建议是确保您使用的是最新的库,然后重新运行以查看结果。这将使调试更容易。