okhttp java.lang.Illegal ArgumentException:意外的url

时间:2019-01-11 08:28:29

标签: java okhttp

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

服务正常运行30分钟后引发异常。此网址应该是正常的。目前无法复制该异常。为什么抛出此异常?我使用的版本是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)

1 个答案:

答案 0 :(得分:0)

如果您使用的是旧版本(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类完成的。

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