gpt4 book ai didi

android - 使用 DefaultHTTPClient 和抢先身份验证下载文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:13:41 24 4
gpt4 key购买 nike

在我遇到很多抢先式身份验证问题之后,我终于让它工作了。现在下一个问题。我想用它获取一个文件,但我不知道如何获取。我认为文件数据可能在变量响应中,但事实并非如此。任何想法这可能如何工作?我尝试了好几天都没有成功 :( - 基本上我正在尝试下载一个 jpeg 文件,该文件位于受 prem.auth 保护的服务器上。

        // BASIC AUTH
/*
* ====================================================================
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
//http://svn.apache.org/repos/asf/httpcomponents/httpclient/branches/4.0.x/httpclient/src/examples/org/apache/http/examples/client/ClientPreemptiveBasicAuthentication.java
httpclient = new DefaultHttpClient();

httpclient.getCredentialsProvider().setCredentials(
new AuthScope(host, port),
new UsernamePasswordCredentials(username, password));

// Generate BASIC scheme object and stick it to the local
// execution context
BasicHttpContext localcontext = new BasicHttpContext();

BasicScheme basicAuth = new BasicScheme();
localcontext.setAttribute("preemptive-auth", basicAuth);

//first request interceptor
httpclient.addRequestInterceptor(new PreemptiveAuth(), 0);

HttpHost targetHost = new HttpHost(host, port, "http");

//HttpGet httpget = new HttpGet("/");

HttpGet httpget = new HttpGet(http.url);

System.out.println("executing request" + httpget.getRequestLine());
/// !!!
HttpResponse response = httpclient.execute(targetHost, httpget, localcontext);
HttpEntity entity = response.getEntity();

System.out.println("----------------------------------------");
System.out.println("+"+response.getStatusLine()+"+");
...

最佳答案

好吧,我现在自己解决了 - 这里是解决方案:

        StringBuffer tmp = new StringBuffer();  // for content

if (entity != null) {
InputStream is = entity.getContent();

int l = 0;
byte[] t = new byte[1024];

while ((l = is.read(t)) != -1) {
for (int i=0; i<l ; i++){
tmp.append((char)t[i]);
}
}
}

return tmp.toString();

关于android - 使用 DefaultHTTPClient 和抢先身份验证下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3011770/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com