首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Httpfs使用httpclient创建或附加文件

Httpfs使用httpclient创建或附加文件
EN

Stack Overflow用户
提问于 2017-11-22 01:08:02
回答 1查看 269关注 0票数 0

我使用HTTPCLIENT创建或附加带有rest组件HTTPFS的文件。

cmd curl示例-使用curl

代码语言:javascript
复制
curl -i -X PUT -s --negotiate -u : "http://httpfsServer:14000/webhdfs/v1/user/a_app_kpi/tmp/testAppend.txt?op=CREATE&data=true" --header "Content-Type:application/octet-stream" --header "Transfer-Encoding:chunked" -T testAppend.txt

return query
HTTP/1.1 100 Continue

HTTP/1.1 401 Unauthorized
Server: Apache-Coyote/1.1
WWW-Authenticate: Negotiate
Set-Cookie: hadoop.auth=; Path=/; HttpOnly
Content-Type: text/html;charset=utf-8
Content-Length: 997
Date: Tue, 21 Nov 2017 16:07:07 GMT

HTTP/1.1 100 Continue

HTTP/1.1 201 Created
Server: Apache-Coyote/1.1
Set-Cookie: hadoop.auth="u=a_app_kpi&p=a_app_kpi@Environnement&t=kerberos-dt&e=1511316427865&s=JIJTCZS31D1wphVORe3ygZ1NBuo="; Path=/; HttpOnly
Content-Type: application/json
Content-Length: 0
Date: Tue, 21 Nov 2017 16:07:07 GMT

但当我执行请求时,程序返回错误com.vhl.action.WebHdfsAction - null

我的create代码如下:

代码语言:javascript
复制
CloseableHttpClient httpClient = cnxHttp.getHttpClient();
File file = new File(beanActionHttp.getPathLocal());
InputStreamEntity reqEntity = new InputStreamEntity(
                            new FileInputStream(file), -1, ContentType.APPLICATION_OCTET_STREAM);
                    reqEntity.setChunked(true);

HttpUriRequest request = RequestBuilder
                        .put(action_http)
                        .setEntity(reqEntity)
                        .build();

request.addHeader(HttpHeaders.TRANSFER_ENCODING, "chunked");
request.addHeader(HttpHeaders.CONTENT_TYPE, "application/octet-stream");
// HERE EXECUTE RETURN NULL
CloseableHttpResponse response = httpClient.execute(request);
EN

回答 1

Stack Overflow用户

发布于 2017-11-22 18:48:38

我找到了我的麻烦。首先,我更改了方法execute请求以捕获一个奇妙的错误-谢谢错误

CloseableHttpResponse response =httpClient.execute(请求);to HttpResponse response = httpClient.execute(request);

代码语言:javascript
复制
Error catching 
    org.apache.http.client.ClientProtocolException
            at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:187)
            at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
            at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)
            at com.vhl.action.WebHdfsAction$4.run(WebHdfsAction.java:399)
            at com.vhl.action.WebHdfsAction$4.run(WebHdfsAction.java:326)
            at java.security.AccessController.doPrivileged(Native Method)
            at javax.security.auth.Subject.doAs(Subject.java:356)
            at com.vhl.action.WebHdfsAction.doCreateAppend(WebHdfsAction.java:326)
            at com.vhl.action.WebHdfsAction.appendFileHdfsHttpfs(WebHdfsAction.java:93)
            at com.vhl.httpclient.HttpClient.main(HttpClient.java:74)
    Caused by: org.apache.http.client.NonRepeatableRequestException: Cannot retry request with a non-repeatable request entity.

所以我的问题是,我的请求不能用不可重复的请求实体重试请求。

我使用下面的内容来解决我的问题Cannot retry request with a non-repeatable request entity

我将我的实体添加为缓冲区"BufferedHttpEntity"

最后,代码正常工作:

代码语言:javascript
复制
CloseableHttpClient httpClient = cnxHttp.getHttpClient();
File file = new File(beanActionHttp.getPathLocal());
InputStreamEntity reqEntity = new InputStreamEntity(
                            new FileInputStream(file), -1, ContentType.APPLICATION_OCTET_STREAM);
                    reqEntity.setChunked(true);

BufferedHttpEntity reqEntityBuf = new BufferedHttpEntity(reqEntity);

HttpUriRequest request = RequestBuilder
                        .put(action_http)
                        .setEntity(reqEntityBuf)
                        .build();


// HERE EXECUTE RETURN NULL
CloseableHttpResponse response = httpClient.execute(request);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47418774

复制
相关文章

相似问题

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