У меня есть php-скрипт, который выполняется по URL-адресу. (например, www.something.com/myscript?param=xy)
Когда этот скрипт выполняется в браузере, он дает закодированный результат, отрицательное или положительное число.
Я хочу выполнить этот скрипт из Java-кода (J2EE) и сохранить результат в каком-то объекте.
Я пытаюсь использовать httpURLConnection
для этого. Я устанавливаю соединение, но не могу получить результат. Я не уверен, что вообще исполняю сценарий.
public class URLConnectionReader { public static void main(String[] args) throws Exception { URL yahoo = new URL("http://www.yahoo.com/"); URLConnection yc = yahoo.openConnection(); BufferedReader in = new BufferedReader( new InputStreamReader( yc.getInputStream())); String inputLine; while ((inputLine = in.readLine()) != null) System.out.println(inputLine); in.close(); } }
Этот фрагмент из официального учебника Java ( http://java.sun.com/docs/books/tutorial/networking/urls/readingWriting.html ). Это должно помочь вам.
Если ваше приложение J2EE развернуто на том же сервере, скрипт PHP включен, вы также можете выполнить его непосредственно через независимый процесс, например:
public String execPHP(String scriptName, String param) { try { String line; StringBuilder output = new StringBuilder(); Process p = Runtime.getRuntime().exec("php " + scriptName + " " + param); BufferedReader input = new BufferedReader (new InputStreamReader(p.getInputStream())); while ((line = input.readLine()) != null) { output.append(line); } input.close(); } catch (Exception err) { err.printStackTrace(); } return output.toString(); }
Вы будете оплачивать накладные расходы на создание и выполнение процесса, но вы не будете создавать сетевое подключение каждый раз, когда вам нужно выполнить сценарий. Я думаю, что в зависимости от размера вашей продукции один будет работать лучше, чем другой.
Если вы пытаетесь запустить его по HTTP, я бы порекомендовал библиотеки Apache Commons HTTP Client . Они делают невероятно легким выполнение этой задачи. Например:
HttpClient http = new HttpClient(); http.setParams(new HttpClientParams()); http.setState(new HttpState()); //For Get GetMethod get = new GetMethod("http://www.something.com/myscript?param="+paramVar); http.executeMethod(get); // For Post PostMethod post = new PostMethod("http://www.something.com/myscript"); post.addParameter("param", paramVar); http.executeMethod(post);
В отношении соответствующей заметки, если вы пытаетесь выполнить php-скрипт из java-программы, вы можете ссылаться на следующий код
Process p = Runtime.getRuntime().exec("php foo.php"); p.waitFor(); String line; BufferedReader error = new BufferedReader(new InputStreamReader(p.getErrorStream())); while((line = error.readLine()) != null){ System.out.println(line); } error.close(); BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream())); while((line=input.readLine()) != null){ System.out.println(line); } input.close(); OutputStream outputStream = p.getOutputStream(); PrintStream printStream = new PrintStream(outputStream); printStream.println(); printStream.flush(); printStream.close();
Сегодня я столкнулся с такой же проблемой. Для меня эта работа была URLEncoding параметров скрипта PHP с использованием метода java.net.URLEncoder.encode.
String sURL = "myURL"; String sParam="myparameters"; String sParam=java.net.URLEncoder.encode(sParam,"UTF-8"); String urlString=sURL + sParam; HttpClient http = new HttpClient(); try { http.getHttpResponse(urlString); } catch (AutomationException e) { // TODO Auto-generated catch block e.printStackTrace(); } http=null;