2010-06-10 4 views
6

Po tym, jak miałem wiele problemów z uwierzytelnianiem wyprzedzającym, w końcu udało mi się to zrobić. Teraz następny problem. Chcę dostać plik, ale nie wiem jak. Myślałem, że dane pliku mogą być w zmiennej odpowiedzi, ale tak nie jest. Jakieś pomysły, jak to może działać? Próbuję go od dni bez powodzenia :(. -. Zasadniczo Próbuję pobrać plik jpeg, która jest na serwerze chronionym przez prem authPobieranie pliku za pomocą DefaultHTTPClient i uwierzytelnianie zapobiegawcze

 // 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()+"+"); 
... 
+0

Czy reagować serwera z adresem URL obrazu do pobrania – primpap

+0

Nie używam bezpośrednio URL np http://123.123.123.123/admin/snapshot.jpg i otwarte? przeglądarka, w której wyświetlany jest obraz.Muszę wiedzieć, jak uzyskać zawartość pliku (która jest określona w http.url), ale na razie mogę znaleźć w zmiennej-odpowiedzi tylko nagłówki, które wysyła serwer (HTTP 1,1 200 OK ... i tak dalej) ... – Nils

Odpowiedz

3

dobrze, rozwiązać go sobie teraz - tutaj rozwiązanie:

 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(); 
+1

To jest całkowicie błędne .... to daje ci zawartość, a nie plik ... – debracey