#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.