HTML очищает веб-сайт, данные аутентификации которого у меня есть - PullRequest
0 голосов
/ 22 февраля 2011

, поэтому я использую следующий код для получения HTML-кода определенного URL:

import java.io.*;
import java.net.*;

public class SourceViewer {

  public static void main (String[] args) throws IOException{
    System.out.print("Enter url of local for viewing html source code: ");
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String url = br.readLine();
    try{
      URL u = new URL(url);
      HttpURLConnection uc = (HttpURLConnection) u.openConnection();
      int code = uc.getResponseCode();
      String response = uc.getResponseMessage();
      System.out.println("HTTP/1.x " + code + " " + response);
      for(int j = 1; ; j++){
        String header = uc.getHeaderField(j);
        String key = uc.getHeaderFieldKey(j);
        if(header == null || key == null)
          break;
        System.out.println(uc.getHeaderFieldKey(j) + ": " + header);
      }
      InputStream in = new BufferedInputStream(uc.getInputStream());
      Reader r = new InputStreamReader(in);
      int c;
      while((c = r.read()) != -1){
        System.out.print((char)c);
      }
    }
    catch(MalformedURLException ex){
      System.err.println(url + " is not a valid URL.");
    }
    catch(IOException ie){
      System.out.println("Input/Output Error: " + ie.getMessage());
    }
  }
}

Этот код работает с Википедией и другими сайтами, но для моего URL это не так. Например:

ВХОД:

Введите локальный URL для просмотра исходного кода html: http://ntu -edu-sg.campuspack.eu / Groups / SC207-SOFTWARE_ENGINEERING / WikiCPE207_Template_0 / Week_11_Software_Testing

ВЫВОД:

HTTP / 1.x 403 Запрещено Set-Cookie: ARPT = LWYYVUShyp1CKIQY; Путь = / X-Powered-By: Servlet / 2,5 Сервер: Sun GlassFish Enterprise Server v2.1 Набор-Cookie: UGROUTE = 4c5e7101a68101c06a712650c7352d98; Path = / P3P: CP = "ALL DSP COR CUR ADMa DEVA TAIa PSAa PSDa IVAa IVDa НАШ АВТОБУС UNI COM NAV INT CNT STA PRE» Set-Cookie: UG = zc2qAfg {; Path = / Cache-Control: не хранить, не кэшировать, обязательно повторная проверка Прагма: без кеша Истекает: 0 X-Powered-By: JSF / 1.2 X-Powered-By: JSF / 1.2 Тип содержимого: text / html; charset = UTF-8 Контент-язык: en-US Передача-кодировка: чанки Дата: вторник, 22 февраля 2011 г. 16:09:48 по Гринвичу Ошибка ввода / вывода: сервер возвратил код ответа HTTP: 403 для URL: http://ntu -edu-sg.campuspack.eu / Groups / SC207-SOFTWARE_ENGINEERING / WikiCPE207_Template_0 / Week_11_Software_Testing

Код ответа 403 указывает, что сервер отказывает мне в разрешении на очистку. У меня есть данные для аутентификации, необходимые для входа в систему, и, если я пытаюсь получить доступ к URL-адресу из браузера, появляется окно с просьбой перенаправить на родительский сайт. Мне было интересно, есть ли какой-нибудь способ сделать это окно всплывающим из моего кода.

Чтобы обойти проблему аутентификации, я попытался войти в систему из браузера, а затем запустить код, пока я все еще входил в систему. Однако при выполнении кода я получаю тот же вывод. Это сбивает меня с толку, так как копирование-вставка URL-адреса в другую вкладку браузера после входа в систему не запрашивает детали аутентификации, а просто отображает данные, подразумевая, что у меня уже есть разрешения. Может кто-нибудь, пожалуйста, посоветуйте мне, как очистить URL?

Ответы [ 2 ]

1 голос
/ 22 февраля 2011

Сначала вам нужно использовать реальный полнофункциональный HTTPClient , который будет обрабатывать перенаправления и файлы cookie аутентификации, которые он устанавливает перед перенаправлением. Вам нужно что-то, что подражает тому, что делает браузер. HttpURLConnection не сможет сделать это для вас в этом случае.

Хорошее место для начала диагностики того, что вам нужно установить и как использовать что-то вроде Firebug и LiveHttpHeaders в Firefox или в режиме Tools -> Developer Tools в Chrome, чтобы точно узнать, какие заголовки и как работает перенаправление и какие файлы cookie он устанавливает и ожидает, когда он будет доступен.

0 голосов
/ 22 февраля 2011

Вы пытаетесь эмулировать браузер с помощью очень простой программы очистки.Чтобы вы могли пройти аутентификацию на сервере, вам нужно использовать библиотеку, такую ​​как HTTPClient , чтобы отправить форму на странице входа.Затем вам необходимо сохранить данные о сеансе, чтобы каждый запрос, который вы делаете на веб-сайте, мог использоваться для идентификации вашей аутентифицированной программы.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...