当我使用retrofit 1.4.1和okhttp 1.3.0在WS上激活gzip时,我遇到了问题.
RequestInterceptor requestInterceptor = new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
request.addHeader("content-type", "application/json");
request.addHeader("accept-encoding", "gzip"); // Here is the problem
}
};
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(Constants.HOST)
.setLogLevel(RestAdapter.LogLevel.FULL)
.setRequestInterceptor(requestInterceptor)
.build();
Run Code Online (Sandbox Code Playgroud)
如果我评论以下行request.addHeader("accept-encoding", "gzip");没有问题,但如果激活gzip,我会收到一个错误(我的请求落入failure).
这是我的logcat request.addHeader("accept-encoding", "gzip");
1326 Retrofit D : HTTP/1.1 200 OK
1326 Retrofit D Cache-Control: public, max-age=600
1326 Retrofit D Content-Encoding: gzip
1326 Retrofit D Content-Length: 254
1326 Retrofit D Content-Type: application/json
1326 Retrofit D Date: Wed, 05 Feb 2014 …Run Code Online (Sandbox Code Playgroud) 我在我的Android应用程序中使用Volley库.它工作正常,但我看到OkHttp也提供了一些更多的改进.我使用以下方法将OkHttp与Volley集成:
Volley.newRequestQueue(mCtx.getApplicationContext(), new OkHttpStack());
Run Code Online (Sandbox Code Playgroud)
我的OkHttpStack类是:
public class OkHttpStack extends HurlStack {
private final OkUrlFactory mFactory;
public OkHttpStack() {
this(new OkHttpClient());
}
public OkHttpStack(OkHttpClient client) {
if (client == null) {
throw new NullPointerException("Client must not be null.");
}
mFactory = new OkUrlFactory(client);
}
@Override protected HttpURLConnection createConnection(URL url) throws IOException {
return mFactory.open(url);
}
}
Run Code Online (Sandbox Code Playgroud)
1)值得吗?我没有注意到任何明显的改进,但这可能是因为我还没有在我的服务器上实现SPDY支持.
2)OkHttp的增强功能是响应缓存.但是,凌空也是如此.我是否会遇到类似的问题:https://github.com/square/okhttp/issues/680
3)另外,我在Volley中使用两个RequestQueues - 一个用于图像,另一个用于JSON.我应该在两个队列中使用OkHttp吗?
我们在Android项目中使用okhttp与我们的API交谈; 所有通信都使用SSL/TLS加密,我们的服务器可以说SPDY.我们还在Google Play服务中为融合位置提供商和其他一些功能进行链接.
我们目前没有使用的Play服务的一部分是他们的安全提供商,它承诺升级设备的SSL堆栈以某种方式防止各种漏洞.但是,文档对于提供程序实际执行的操作以及SSL方法受其影响的内容有些模糊,哪些不是(提供了一些示例,但不是全面的列表).
所以,我想我的问题是双重的:
动态安全提供程序是否可以使用okhttp,或者okhttp是否依赖于不受安装提供程序影响的较低级别(或更高级别)的API?
假设它确实有效,有什么好处?是否值得关注安全利益?它实际上是否会修复okhttp 2.2中与ALPN相关的本机崩溃,正如nfuller提示的那样?
您好AndroidUploaders,
我已经给出了回答使用OkHttp在multipart中上传一个大文件,但我坚持使用多个图像上传.
我想一次动态上传1到10张图片.
RequestBody requestBody = new MultipartBuilder()
.type(MultipartBuilder.FORM)
.addFormDataPart(KEY_PHOTO_CAPTION, photoCaption)
.addFormDataPart(KEY_FILE, "profile.png", RequestBody.create(MEDIA_TYPE_PNG, sourceFile))
.build();
Run Code Online (Sandbox Code Playgroud)
我ArrayList的PhotoCaption具有类captionPhoto和urlPhoto那么,如何可以addFormDataPart()
我想循环并调用这个函数多次ArrayList大小.
addFormDataPart()是否有动态使用的解决方案?
问题:如何向OkHTTP添加授权代理.
我知道OkHTTP的构建器确实支持代理,尽管我很难设置代理.
/**
* Given a Url and a base64 encoded password return the contents of a website.
* @param urlString
* @param password
* @return JSON
*/
public String getURLJson(String urlString, String password) {
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(60, TimeUnit.SECONDS)
.writeTimeout(60, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS)
.build();
Request request = new Request.Builder()
.url(urlString)
.get()
.addHeader("authorization", "Basic " + password)
.addHeader("cache-control", "no-cache")
.build();
Response response = null;
try {
response = client.newCall(request).execute();
String string = response.body().string(); …Run Code Online (Sandbox Code Playgroud) 所以我开始使用Okhttp 3,网上的大多数例子都是关于旧版本的
我需要在OkHttp客户端请求中添加一个cookie,如何用OkHttp 3完成?
在我的情况下,我只是想静态地将它添加到客户端调用而不从服务器接收它
有没有办法获取请求的最终URL?我知道我可以自己禁用重定向,但有没有办法获取我正在加载的当前URL?就像,如果我要求a.com并被重定向到b.com,有没有办法获得url b.com的名称?
我正在使用OkHttp通过Android上的套接字发送和接收消息.
创建套接字连接 -
SocketListener listener = new SocketListener();
mOkHttpClient = new OkHttpClient.Builder()
.readTimeout(0, TimeUnit.MILLISECONDS)
.build();
Request request = new Request.Builder()
.url(socketURL)
.build();
mOkHttpClient.newWebSocket(request, listener);
Run Code Online (Sandbox Code Playgroud)
这是用于侦听所有Web套接字事件的SocketListener类 -
public final class SocketListener extends WebSocketListener {
@Override
public void onOpen(WebSocket webSocket, Response response) {
// doing something
isSocketConnected = true;
}
@Override
public void onMessage(WebSocket webSocket, String text) {
// doing something
}
@Override
public void onMessage(WebSocket webSocket, ByteString bytes) {
}
@Override
public void onClosing(WebSocket webSocket, int code, String reason) {
// …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用OkHttp 3.12.0中最近添加的功能:全操作超时.为此,我还依赖于Invocation翻新2.5.0中的新类,它允许我检索方法注释.
注释是:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Timeout {
int value();
TimeUnit unit();
}
Run Code Online (Sandbox Code Playgroud)
改造界面是:
public interface AgentApi {
@Timeout(value = 100, unit = TimeUnit.MILLISECONDS)
@GET("something")
Call<String> getSomething();
}
Run Code Online (Sandbox Code Playgroud)
拦截器是:
class TimeoutInterceptor implements Interceptor {
@NonNull
@Override
public Response intercept(@NonNull Chain chain) throws IOException {
Request request = chain.request();
final Invocation tag = request.tag(Invocation.class);
final Method method = tag != null ? tag.method() : null;
final Timeout timeout = method != null ? method.getAnnotation(Timeout.class) : null;
if (timeout …Run Code Online (Sandbox Code Playgroud) 首先,我已经阅读了很多关于我的问题的问题,但是它从来没有给我解决方案。以下是一些有关我的问题的阅读问题。
我也阅读了有关我的问题的这篇文章,但它也从未为我提供解决方案。
问题:
我在Web服务应用程序中使用Okhhtp3库。它工作正常,但是当互联网连接速度慢或连接不可靠时,它就卡住了,永远不会超时,也永远不会调用超时异常或失败方法。
这是客户端代码:
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(20, TimeUnit.SECONDS)
.writeTimeout(20, TimeUnit.SECONDS)
.readTimeout(20, TimeUnit.SECONDS)
.retryOnConnectionFailure(false)
.build();
Run Code Online (Sandbox Code Playgroud)
20秒后如何获得超时异常或称为故障方法?
请帮我。谢谢