使用OkHttp by Square https://github.com/square/okhttp,我该怎么做:
理想情况下,每次请求都会自动存储,重新发送和更新cookie.
我想我需要创建一个新的SSL套接字工厂?此外,出于显而易见的原因,我不想使用全局SSL上下文(https://github.com/square/okhttp/issues/184).
谢谢!
编辑:
从okhttp 2.1.0开始,您可以非常轻松地修复证书.
请参阅此处的源代码以开始使用
我通过OkHttp库实现我的http调用.一切正常,但我注意到,当我作为响应的字符串访问身体两次时,IllegalStateException将被抛出.也就是说,我(例如):Log.d("TAG", response.body().string())之后我真的想要使用那个字符串processResponse(response.body().string()).但是第二次调用会抛出异常消息closed.
怎么可能两次访问字符串导致失败?我想处理该响应而不需要添加包装器/虚拟对象只是为了保存一些值(如header,body,statuscode).
我想知道我应该为我的改装客户设置多少秒.
我怎么可能收到这条消息?这没有任何意义。我正在使用com.squareup.retrofit2:retrofit:2.9.0
Caused by: java.lang.IllegalStateException: Expected Android API level 21+ but was 30
at okhttp3.internal.platform.AndroidPlatform$Companion.buildIfSupported(AndroidPlatform.kt:370)
at okhttp3.internal.platform.Platform$Companion.findPlatform(Platform.kt:204)
at okhttp3.internal.platform.Platform$Companion.access$findPlatform(Platform.kt:178)
2020-09-16 12:37:07.645 6480-6480/lv.ltt.gasogmp.dev_v3 E/AndroidRuntime: at
okhttp3.internal.platform.Platform.<clinit>(Platform.kt:179)
Run Code Online (Sandbox Code Playgroud) 我在我的Android应用程序中使用okhttp 2.0,并没有找到为所有传出请求设置一些常用用户代理的方法.
我以为我可以做点什么
OkHttpClient client = new OkHttpClient();
client.setDefaultUserAgent(...)
Run Code Online (Sandbox Code Playgroud)
......但是没有这样的方法或类似方法.当然我可以提供一些扩展实用程序方法,它会将RequestBuilder包装起来.header("UserAgent")然后我会用它来构建我的所有请求,但我想也许我错过了一些现有的和更简单的方法?
我正在使用OkHttp客户端和Jackson进行Json Serialization的Retrofit,并希望得到响应的标题.
我知道我可以扩展OkClient并拦截它.但这是在反序列化过程开始之前.
我基本上需要的是将标题与反序列化的Json对象一起使用.
在Android中,我想使用新的OkHttp 2.0来请求一些URL,但我想要更多地控制重定向.我已经找到启用或禁用以下HTTPS→HTTP或HTTP→HTTPS重定向的选项,但我不想遵循任何重定向,因此我可以尽快更新我的GUI,并选择是否遵循它们应用逻辑.我没有看到这样做的选项.是否有可能,如果可能,我该如何实现这一目标?
我有以下设置:
final OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.setReadTimeout(5, TimeUnit.SECONDS);
okHttpClient.setConnectTimeout(5, TimeUnit.SECONDS);
RestAdapter.Builder builder = new RestAdapter.Builder()
.setEndpoint(ROOT)
.setClient(new OkClient(okHttpClient))
.setLogLevel(RestAdapter.LogLevel.FULL);
Run Code Online (Sandbox Code Playgroud)
我试图处理我的服务器关闭和用户获得连接超时异常的情况,这是我的日志记录:
java.net.SocketTimeoutException: failed to connect to /192.168.0.53 (port 3000) after 5000ms
Run Code Online (Sandbox Code Playgroud)
完整日志记录:http://pastebin.com/gscCGb7x
有没有办法将其转换为改装故障方法,以便我可以在那里处理它?
提前致谢!
我试图通过Android应用程序中的改造连接到休息服务.我得到了回复.但是当服务有一些错误响应时,会发生转换异常,现在我想根据响应主体做一些操作.但我得到的响应正文为NULL.但改装日志有一条错误消息.为什么会这样呢?
D/Reftofit log(24856): OkHttp-Received-Millis: 1397527055676
D/Reftofit log(24856): OkHttp-Response-Source: NETWORK 200
D/Reftofit log(24856): OkHttp-Sent-Millis: 1397527055492
D/Reftofit log(24856): Server: Apache/2.2.22 (Ubuntu)
D/Reftofit log(24856): X-Powered-By: PHP/5.3.10-1ubuntu3.10
D/Reftofit log(24856): {"result":"Invalid Token ID"}
Run Code Online (Sandbox Code Playgroud)
码:
public void failure(RetrofitError retrofitError) {
String response = null;
TokenError tokenError = (TokenError) retrofitError.getBodyAs(TokenError.class);
response = tokenError.getErrorDetails();
Log.e(TAG, response);
if (response != null && response.contains("Invalid Token ID")) {
GroupDataProvider.getInstance().onFailure();
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里得到tokenError了null.我不知道为什么?我是否需要使用rest适配器设置某些内容,以便将响应传递给改进的错误对象.