Проблема подключения к PHP-скрипту с помощью Java-приложения

#java #php #urlconnection

#java #php #urlconnection

Вопрос:

У меня есть swing-приложение, которое, когда пользователь нажимает в нем на JButton, подключается к php-скрипту на моем веб-сайте, чтобы отправить ему некоторые данные и получить результаты из PHP-скрипта.

Это отлично работало для сотен пользователей, которые использовали это приложение, но сегодня один из пользователей в компании сообщил, что он не может это использовать… Когда он нажимает кнопку, приложение зависает, и ничего не происходит.

Я даже использую UncaughtExceptionHandler для обработки любых неожиданных исключений в приложении, но ничего не выдается. Я подумал, что это может быть что-то в сети его компании или используемый порт, но я не уверен. Есть предложения, почему это может произойти?

Вот мой код :

 String part1 = "...";  // Message part 1.
String part2 = "...";  // Message part 2.

//1. Encode the message to suite the URL path requirements :
    String params = URLEncoder.encode( "part1", "UTF-8" )   "="   URLEncoder.encode( part1, "UTF-8" );
    params  = "amp;"   URLEncoder.encode( "part2", "UTF-8" )   "="   URLEncoder.encode( part2, "UTF-8" );

//2. Connect to the website page :
    URL url = new URL( "http://www.website.com/page.php" );
    URLConnection conn = (URLConnection) url.openConnection();
    conn.setConnectTimeout( 20000 );
    conn.setDoOutput( true );
    conn.setDoInput( true );
    conn.connect();

//3. Call the page and send the parameters to it :
    OutputStreamWriter out = new OutputStreamWriter( conn.getOutputStream() ); 
    out.write( params );
    out.flush();
    out.close();

//4. Get the result :
    Object contents = conn.getContent();
    InputStream is = (InputStream) contents;
    StringBuffer buf = new StringBuffer();
    int c;
    while( ( c = is.read() ) != -1 ) {
      buf.append( (char) c );
    }
  

Комментарии:

1. Может ли он загрузить этот URL-адрес в свой веб-браузер?

2. На вашем месте я бы использовал commons-httpclient

3. Я не уверен, почему вы явно упомянули «компанию» в вопросе. Находится ли это в какой-либо корпоративной сети с ограничительным прокси / брандмауэром? Это та же компания, в которой состоят другие пользователи 100s?

4. @CanSpice: я могу отправить пользователю URL, чтобы попробовать это, но чем это будет отличаться? О чем вы думаете?

5. @BalusC: Я упоминал, что, поскольку большинство моих пользователей — частные лица, они используют программу на своих персональных компьютерах (каждый пользователь из другого города или страны), но этот пользователь работает в компании, что не является обычным случаем, у них есть сетевой отдел, контролирующий их доступ, и его администратор уже спросил, какие порты TCPIP используются во время запроса скрипта. Я не очень хорош в работе с сетью, но насколько я понимаю, я использую порт 80 по умолчанию.

Ответ №1:

Вы уверены, что сбой не в PHP-скрипте?

Комментарии:

1. Я полагаю, вы могли бы сделать это комментарием 🙂 … Да, я уверен. Скрипт отлично работает для всех остальных пользователей В программе есть другие скрипты для подключения к моему серверу, такие как проверка обновлений программы или сообщение о проблеме из программы. Пользователь перепробовал все это, и ни одно из них не сработало… Все зависает.

Ответ №2:

Закодируйте всю строку параметров следующим образом:

 String params = "part1"   "="   part1;
params  = "amp;"   "part2"   "="   part2;
params = URLEncoder.encode(params, "UTF-8")
  

Комментарии:

1. Какое это имеет отношение к его проблеме?

2. Он уже кодирует их правильным образом. Вы не должны кодировать = и amp; . В противном случае это становится одним большим именем параметра.

3. Спасибо. Я этого не знал, я всегда использую commons-httpclient.