2016-03-22 10 views
0

У меня есть приложение Java, которое извлекает данные с сервера, читая эхо скрипта php.Как читать php-эхо с сервера через java без необходимости в javascript-странице?

Я использую этот код:

String url = new UrlBuilder(URL) 
      .addParameter("option", "read") 
      .toString(); 
BufferedReader br = null; 
try { br = new BufferedReader(new InputStreamReader(new URL(url).openStream(), "UTF-8")); } 
catch (IOException e) { e.printStackTrace(); } 
String out = "", line; 
try { 
    while ((line=br.readLine()) != null) { 
     out += line; 
    } 
} catch (IOException e) { e.printStackTrace(); } 
try { 
    br.close(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
return out; 

UrlBuilder только кодирующий мой URL

Ответ Я получаю это автоматически созданный сайт, который говорит, что нужно JavaScript активированного для доступа к сайту:

<html><body><script type="text/javascript" src="/aes.js" ></script><script>function toNumbers(d){var e=[];d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});return e}function toHex(){for(var d=[],d=1==arguments.length&&arguments[0].constructor==Array?arguments[0]:arguments,e="",f=0;f<d.length;f++)e+=(16>d[f]?"0":"")+d[f].toString(16);return e.toLowerCase()}var a=toNumbers("f655ba9d09a112d4968c63579db590b4"),b=toNumbers("98344c2eee86c3994890592585b49f80"),c=toNumbers("261516e5343951a035c7cc4ad11521ef");document.cookie="__test="+toHex(slowAES.decrypt(c,2,a,b))+"; expires=Thu, 31-Dec-37 23:55:55 GMT; path=/"; document.cookie="referrer="+escape(document.referrer); location.href="[servers url here]";</script><noscript>This site requires Javascript to work, please enable Javascript in your browser or use a browser with Javascript support</noscript></body></html> 

Итак, как я читаю фактический контент/источник файла? Или как я могу предотвратить создание сервером файла?

1.Attempt: Извлечение значения печенья:

try { 
    URL myUrl = new URL(URL+"?option=read"); 
    URLConnection urlConn = myUrl.openConnection(); 
    urlConn.connect(); 
    String headerName=null; 
    for (int i=1; (headerName = urlConn.getHeaderFieldKey(i))!=null; i++) { 
     if (headerName.equals("__test")) {   
      String cookie = urlConn.getHeaderField(i); 
      cookie = cookie.substring(0, cookie.indexOf(";")); 
      String cookieName = cookie.substring(0, cookie.indexOf("=")); 
      String cookieValue = cookie.substring(cookie.indexOf("=") + 1, cookie.length()); 
      System.out.println(cookieName); 
      System.out.println(cookieValue); 
     } 
    } 
} catch(Exception e) { 
    e.printStackTrace(); 
} 

Выход = нет ...

Где моя ошибка?

+0

эхо является лишь частью выхода. вы можете передать его в приложение в качестве аргумента? php myfile.php | java mytest.class – Fallenreaper

+0

Приложение ist делает чтение не только в начале – Error404

+0

Java не просто получает сайт, который говорит, что вам нужен JavaScript. Это дает вам весь сайт, включая неинтерпретируемый JavaScript-код. Сообщение об отсутствии JavaScript является частью HTML, который фактически написан как предупреждение для браузеров. Единственными данными, которые PHP генерирует каждый раз, являются эти шестнадцатеричные строки. Остальные (включая JS) являются шаблонами. Java не интерпретирует JavaScript, поэтому вам придется перевести этот код JavaScript на Java или найти способ запуска JavaScript. – LinuxDisciple

ответ

0
  1. На ваш запрос вы можете указать add the http cookie с именем '__test'. Вычисленное значение cookie JS можно найти с помощью инструментов браузера (F12). Вероятно, «cookie» referrer также необходим. Например: urlConn.setRequestProperty("Cookie", "__test=<cookie from browser>; referrer=google.com/search") перед вызовом urlConn.connect()

  2. Другой вариант можно использовать htmlUnit для запуска страницы Javascript на стороне сервера и принести РОМ после всех скрипты запуска.

+0

Что вы подразумеваете под кодом? Я не понимаю вопроса. –

+0

Я попробовал решение 1, но он не работает (код в вопросе) – Error404

+0

В приведенном выше коде вы читаете заголовки ответов, не устанавливая заголовок запроса. Перед urlConn.connect() вы должны добавить urlConn.setRequestProperty («Cookie», «__test = ; referrer = https: //www.google.com/search») –