如何使用Square的okHttp设置不同数量的端口?

7
我正在尝试将okHttp与一个不同端口的Web服务连接,例如10000。我的想法是在单元测试期间使用代理来存根响应。然而,没有足够的文档说明如何使用这个库进行操作。事实上,我的实现如下:
OkHttpClient client = new OkHttpClient();
client.setConnectTimeout(TIMEOUT_MS, TimeUnit.MILLISECONDS);

例如,使用其他库(如loopj),可以实现此功能:
httpClient.setProxy("localhost", 10000);

我正在使用这个版本:com.squareup.okhttp:okhttp:2.5.0
1个回答

11

我正在尝试将okHttp与不同端口的Web服务连接起来,例如10000端口。

在您提供给Request.Builder的URL中添加端口号:

Request request = new Request.Builder()
    .url("http://publicobject.com:10000/helloworld.txt")
    .build();

我的想法是在单元测试期间使用代理截断响应。

在测试中使用与生产环境不同的URL。


2
您还可以使用“HttpUrl.Builder”构建URL设置端口。http://square.github.io/okhttp/javadoc/com/squareup/okhttp/HttpUrl.Builder.html#port-int- - Samuel Barbosa
@CommonsWare 谢谢。我尝试了您的解决方案,它起作用了。对于测试,我使用了Mockwebserver,将其用作代理服务器,将url指向为“http://localhost:10000”,而不是实际的api url。 - Jesús Castro
可能我漏掉了什么,但我不明白为什么在需要通过代理连接时,okHttp不能从WiFi设置中获取主机名和端口。 - dentex
在测试中使用与生产环境不同的URL。哈哈哈 - eyurdakul
我使用了他的解决方案,但对我没有用。它默认使用80端口。所以,我采用了以下方式:new HttpUrl.Builder().scheme(this.scheme).host(this.host).port(this.port).build().toString()然后我将路径添加到URL中,并注意到构建器在末尾设置了/。因此,如果您要添加到此处,请删除正斜杠。 - ssi-anik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接