Отправка двух разных запросов на один и тот же PHP-скрипт в Java - PullRequest
0 голосов
/ 09 октября 2011

Я пытаюсь создать приложение Java, которое взаимодействует с PHP-скриптом, который у меня есть в сети! Мое приложение делает один запрос на получение некоторых данных, затем обрабатывает их и делает другой запрос к сценарию. Однако второй запрос не работает вообще, хотя я close() OutputStreamWriter, BufferedReader и HttpsUrlConnection для первого запроса!

Я знаю, что это не тот запрос, что он не работает, потому что я посылаю его раньше всего, он работает! И я также знаю, что метод со вторым запросом в запущен. Вот основы того, что я имею на минуту:

try{
    URL url = new URL("https://mysite.com/script.php");
    HttpsUrlConnection conn = (HttpsUrlConnection) url.openConnection()
    conn.setDoInput(true); conn.setDoOutput(true);

    String request = URLEncoder.encode("request_type", "UTF-8) + "=" + URLEncoder.encode("first", "UTF-8);
    OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
    writer.write(request);
    writer.flush();

    BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    String response;

    while((response = in.readLine()) != null){
         if(response.equals("firstresponse")){
             in.close(); writer.close();
             conn.disconnect();
             makeSecondRequest();}
    }
}catch(Exception e){}

public void makeSecondRequest(){
    URL url = new URL("https://mysite.com/script.php");
    HttpsUrlConnection conn = (HttpsUrlConnection) url.openConnection()
    conn.setDoInput(true); conn.setDoOutput(true);

    String request = URLEncoder.encode("request_type", "UTF-8) + "=" + URLEncoder.encode("second", "UTF-8);
    OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
    writer.write(request);
    writer.flush();
}

Итак, если кто-нибудь знает, как это ДОЛЖНО быть сделано / почему оно может не работать, я был бы признателен, если бы вы сказали мне как можно скорее ...

Заранее спасибо

UPDATE: Теперь я добавил e.printStackTrace() в оператор catch в makeSecondRequest() части моего кода и получаю следующее:

java.lang.IllegalStateException: Already connected
    at java.net.URLConnection.setDoOutput(URLConnection.java:909)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.setDoOutput(HttpsURLConnectionImpl.java:454)
    at engines.LicenceManagement.sendFingerprint(LicenceManagement.java:193)
    at engines.LicenceManagement.verifyOnline(LicenceManagement.java:147)
    at engines.LicenceManagement.actionPerformed(LicenceManagement.java:541)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
    at java.awt.Component.processMouseEvent(Component.java:6504)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    at java.awt.Component.processEvent(Component.java:6269)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4860)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4686)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Window.dispatchEventImpl(Window.java:2713)
    at java.awt.Component.dispatchEvent(Component.java:4686)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
    at java.awt.EventQueue.access$000(EventQueue.java:101)
    at java.awt.EventQueue$3.run(EventQueue.java:666)
    at java.awt.EventQueue$3.run(EventQueue.java:664)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:680)
    at java.awt.EventQueue$4.run(EventQueue.java:678)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Ответы [ 2 ]

0 голосов
/ 12 октября 2011

Не спрашивайте меня, почему, потому что я понятия не имею, но я помещаю второй метод практически, как это было в другом классе, и что вы знаете, без ошибок!

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

0 голосов
/ 09 октября 2011

Проблема в том, что вы никогда не вызываете метод connect .В первом запросе метод connect вызывается методом getInputStream ().Таким образом, чтобы решить вашу проблему, достаточно добавить conn.connect () в ваш метод makeSecondRequest.

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