首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用不可重复的请求实体重试请求

无法使用不可重复的请求实体重试请求
EN

Stack Overflow用户
提问于 2011-11-24 19:49:38
回答 2查看 18.7K关注 0票数 13

我在客户端使用java-http-client库和Apache Transport,在服务器端使用Rails。有时会出现这样的get错误:

代码语言:javascript
复制
11-24 17:37:02.469: WARN/BaseActivity(5925): org.apache.http.client.ClientProtocolException
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:557)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
    at com.google.api.client.http.apache.ApacheHttpRequest.execute(ApacheHttpRequest.java:58)
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:639)
    at com.sk.api.SkClient.updateUser(SkClient.java:157)
    at com.sk.api.SkClient$3.call(SkClient.java:76)
    at com.sk.api.SkClient$3.call(SkClient.java:71)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
    at java.lang.Thread.run(Thread.java:1019)
    Caused by: org.apache.http.client.NonRepeatableRequestException: Cannot retry request with a non-repeatable request entity
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:413)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
    ... 12 more

我应该做些什么来避免这种情况?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-04 22:45:38

我有一个类似的错误,因为我使用的CountingInputStreamEntity是一个不可重复的http客户端。解决方案是使用BufferedHttpEntity,它将不可重复的which客户端转换为可重复的httpclient。

代码语言:javascript
复制
ParcelFileDescriptor fileDescriptor = this.getContentResolver().openFileDescriptor(uri, "r");
            InputStream in = this.getContentResolver().openInputStream(uri);

            CountingInputStreamEntity entity = new CountingInputStreamEntity(in, fileDescriptor.getStatSize());
            entity.setUploadListener(this);
            entity.setContentType("binary/octet-stream");
            entity.setChunked(true); 
        
            BufferedHttpEntity myEntity = null;
            try {
                myEntity = new BufferedHttpEntity(entity);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            put.setEntity(myEntity);
票数 19
EN

Stack Overflow用户

发布于 2016-11-08 18:27:52

我的解决方法如下:

代码语言:javascript
复制
MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
entityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
ContentType contentType = ContentType.create("image/jpeg", Consts.ISO_8859_1);
entityBuilder.addBinaryBody(PARAM_ATTACHMENT, new File(filepath), contentType, StringUtils.getFileName(filepath));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8256550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档