Articles of okhttp

如何使用okhttp上传文件?

我使用okhttp作为我的httpclient。 我认为这是一个很好的api,但文档不是那么详细。 如何使用它来发送带文件上传的http发布请求? public Multipart createMultiPart(File file){ Part part = (Part) new Part.Builder().contentType(“”).body(new File(“1.png”)).build(); //how to set part name? Multipart m = new Multipart.Builder().addPart(part).build(); return m; } public String postWithFiles(String url,Multipart m) throws IOException{ ByteArrayOutputStream out = new ByteArrayOutputStream(); m.writeBodyTo(out) ; Request.Body body = Request.Body.create(MediaType.parse(“application/x-www-form-urlencoded”), out.toByteArray()); Request req = new Request.Builder().url(url).post(body).build(); return client.newCall(req).execute().body().string(); } 我的问题是: […]

升级到OkHttp3后,OkHttpClient抛出exception

我正在使用以下代码行为我使用Retrofit2发送的所有请求添加默认标头: private static OkHttpClient defaultHttpClient = new OkHttpClient(); static { defaultHttpClient.networkInterceptors().add(new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request().newBuilder() .addHeader(“Accept”, “Application/JSON”).build(); return chain.proceed(request); } }); } 在将改造升级到beta-3版本之后,我还必须将OkHttp升级到OkHttp3(实际上我只是将包名称从okhttp更改为okhttp3,该库包含在改造中)。 之后我从这一行得到例外: defaultHttpClient.networkInterceptors().add(new Interceptor()); 引起:java.util.Collections的java.lang.UnsupportedOperationException $ UnmodifiableCollection.add(Collections.java:932) 引起:java.lang.ExceptionInInitializerError 这里有什么问题?

Retrofit和OkHttpClient,在失败方法中捕获连接超时

我有以下设置: 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); 我正在尝试处理我的服务器关闭并且用户获得连接超时exception的情况,这是我的日志记录: java.net.SocketTimeoutException: failed to connect to /192.168.0.53 (port 3000) after 5000ms 完整记录: http : //pastebin.com/gscCGb7x 有没有办法将其转换为改装失败方法,以便我可以在那里处理它? 提前致谢!

Android Picasso库,如何添加身份validation标头?

我尝试使用自定义身份validation器设置自定义OkHttpClient,但正如文档所述:“响应来自远程Web或代理服务器的身份validation挑战。” 我必须为每个图像发出2个请求,这并不理想。 有像Retrofit这样的请求拦截器吗? 或者我在OkHttpClient中遗漏了什么? 我正在使用最新版本: compile ‘com.squareup.picasso:picasso:2.3.2’ compile ‘com.squareup.okhttp:okhttp:2.0.+’ compile ‘com.squareup.okhttp:okhttp-urlconnection:2.0.+’ compile ‘com.squareup.okio:okio:1.0.0’ 谢谢!

使用OkHttp在multipart中上传大文件

使用OKhttp在Android中的multipart中上传单个大文件(更具体地说,到s3)有哪些选择?

访问OkHttp Response的正文字符串两次会导致IllegalStateException:closed

我通过OkHttp库实现我的http调用。 一切正常,但我注意到,当我作为响应的字符串两次访问主体时,将抛出IllegalStateException 。 也就是说,我(例如): Log.d(“TAG”, response.body().string())之后我实际上想要使用该字符串,如processResponse(response.body().string()) 。 但是第二个调用会在消息closed抛出exception。 怎么可能两次访问字符串导致失败? 我想处理该响应而不需要添加包装器/虚拟对象只是为了保存一些值(如header,body,statuscode)。

使用基本HTTP身份validation更改POST请求:“无法重试流式HTTP正文”

我正在使用Retrofit来做一个基本的POST请求,我正在为请求提供一个基本的@Body。 @POST(“/rest/v1/auth/login”) LoginResponse login(@Body LoginRequest loginRequest); 当我为Retrofit构建界面时,我正在提供我自己的自定义OkHttpClient,而我正在做的就是添加我自己的自定义身份validation: @Provides @Singleton public Client providesClient() { OkHttpClient httpClient = new OkHttpClient(); httpClient.setAuthenticator(new OkAuthenticator() { @Override public Credential authenticate(Proxy proxy, URL url, List challenges) throws IOException { return getCredential(); } @Override public Credential authenticateProxy(Proxy proxy, URL url, List challenges) throws IOException { return getCredential(); } }); return new OkClient(httpClient); […]

使用OKHttp,AsyncTask中的同步请求和OKhttp异步请求之间有什么区别?

OKHttp支持同步和异步api 。 如果我想发出异步请求,我可以: 使用AsyncTask,并发出OKhttp同步api。 发出OKhttp异步api。 这两个选项有什么区别? 哪一个更好?

从响应中获取标头(Retrofit / OkHttp客户端)

我正在使用OkHttp客户端和Jackson的Retrofit进行Json序列化,并希望得到响应的标题。 我知道我可以扩展OkClient并拦截它。 但这是在反序列化过程开始之前。 我基本上需要的是将标题与反序列化的Json对象一起使用。

Retrofit是否在主线程上进行网络调用?

我正在尝试在Android上探索Retrofit + OkHttp。 这是我在网上find的一些代码: RestAdapter restAdapter = new RestAdapter.Builder().setExecutors(executor, executor) .setClient(new OkClient(okHttpClient)) .setServer(“blah”).toString()) .build(); 如果我不使用执行程序服务,我的代码是否会在主线程上运行? 我应该在新线程中发出Web请求吗?