2012-06-04 5 views
0

Я пытался загрузить zip-файл со страницы, которая запрашивает имя пользователя/пароль для доступа (аутентификация на основе html-формы). Я использую для него http-версию apache. Раньше я работал над чем-то очень похожим, для этой страницы требуется только пароль для загрузки файла. Вот мой кодскачать файл с помощью apache http

 DefaultHttpClient httpclient = new DefaultHttpClient(); 
      httpclient.setRedirectStrategy(new DefaultRedirectStrategy() { 
         public URI lastRedirectedUri; 

         public boolean isRedirected(HttpRequest request, 
                HttpResponse response, 
                HttpContext context) { 
          boolean isRedirect = false; 
          try { 
           isRedirect = 
             super.isRedirected(request, response, 
                  context); 
          } catch (org.apache.http.ProtocolException e) { 
           e.printStackTrace(); 
          } 
          if (!isRedirect) { 
           int responseCode = 
            response.getStatusLine().getStatusCode(); 
           if (responseCode == 301 || 
            responseCode == 302) { 
            System.out.println("the original response code is" + responseCode); 
            return true; 
           } 
          } 
          return isRedirect; 
         } 

//      public URI getLocationURI(HttpResponse response, HttpContext context) 
//         throws ProtocolException { 
// 
//        lastRedirectedUri = super.getLocationURI(request , response, context); 
// 
//        return lastRedirectedUri; 
//       } 

        }); 


      List<NameValuePair> formparams = new ArrayList<NameValuePair>(); 
      // formparams.add(new BasicNameValuePair("password", arg[1])); 
      formparams.add(new BasicNameValuePair("password", "*****")); 
      formparams.add(new BasicNameValuePair("email", "****")); 
      UrlEncodedFormEntity entity1 = 
       new UrlEncodedFormEntity(formparams, "UTF-8"); 
      HttpPost httppost = 
       new HttpPost("https://*************************/l/?next=/s/48750/d/"); 
       // new HttpPost(arg[0]); 
      httppost.setEntity(entity1); 


      HttpContext localContext = new BasicHttpContext(); 
      CookieStore cookieStore = new BasicCookieStore(); 
      localContext.setAttribute(ClientContextConfigurer.COOKIE_STORE, cookieStore); 
      HttpResponse response = httpclient.execute(httppost, localContext); 
      HttpHost target = 
       (HttpHost)localContext.getAttribute(ExecutionContext.HTTP_TARGET_HOST); 
      System.out.println("Final target: " + target); 


      System.out.println(response.getProtocolVersion()); 
      System.out.println(response.getStatusLine().getStatusCode()); 
      System.out.println(response.getStatusLine().getReasonPhrase()); 
      System.out.println(response.getStatusLine().toString()); 

      HttpEntity entity = response.getEntity(); 
         if (entity != null) { 
          FileOutputStream fos = 
           new java.io.FileOutputStream("download.zip"); 
          entity.writeTo(fos); 
          fos.close(); 
      } 

если открыть URL, приведенных в коде вы найдете форма имеет два параметра по имени электронной почты и пароль, и я снабжал их в качестве formparams (значения комментировал в коде выше). Любая помощь будет принята с благодарностью.

+0

Ваш код кажется нормально, какая ошибка поживаешь? –

+0

Я не получаю никаких erros, когда я проверяю файл «download.zip», в который я пишу выходной поток, его просто файл размером 4 КБ (чего не ожидается). Я изменил расширение этого zip-файла на html и открыл его в блокноте, это страница, такая же, как и страница входа (с полями электронной почты и пароля), хотя и не совсем такая же. – Rpant

ответ

0

Попробуйте использовать функцию BasicAuthentication.

http://hc.apache.org/httpclient-3.x/authentication.html#Authentication_Schemes http://hc.apache.org/httpclient-3.x/authentication.html#Examples

+0

HttpClient разрешает базовую проверку подлинности, но вопрос ищет проверку подлинности на основе html-форм. –

+0

httpclient также поддерживает аутентификацию на основе форм. Раньше я работал с подобной программой. Две отличия в этой программе и другая программа, с которой я работал ранее: 1) Страница в этой программе использует два параметра формы вместо одного. 2) Эта страница защищена (https). Я заметил это только сейчас. – Rpant