【问题标题】:Sending two different requests to same PHP script in Java向Java中的同一个PHP脚本发送两个不同的请求
【发布时间】:2011-10-13 02:40:41
【问题描述】:

我正在尝试制作一个与我在线的 PHP 脚本通信的 Java 应用程序!我的应用程序发出一个请求来接收一些数据,然后处理它并向脚本发出另一个请求。然而,第二个请求根本不起作用,即使我close()OutputStreamWriterBufferedReaderHttpsUrlConnection 用于第一个请求!

我知道这不是它不起作用的请求,因为我先发送它,它起作用了!而且我也知道第二个请求的方法正在运行。以下是我目前掌握的基础知识:

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();
}

所以,如果有人知道这应该怎么做/为什么它可能不起作用,如果你能尽快告诉我,我将不胜感激......

提前致谢

更新: 我现在在 my 代码的makeSecondRequest() 部分的catch 语句中添加了e.printStackTrace(),我收到以下信息:

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)

【问题讨论】:

  • 空的 catch 块将隐藏代码块中抛出的任何异常。我建议摆脱它,或者至少对 catch 块中捕获的异常做一些事情,即使它只是重新抛出它。如果在这段代码中抛出异常,那么知道它会让你更容易找出问题所在!
  • 是的,我想你是对的——我不打印任何堆栈跟踪有点傻!不幸的是,直到明天下午我才能访问我的电脑,但我会查看任何异常情况并尽快报告......
  • @GordonM:好的,我在第二个 catch 块中添加了 e.printStackTrace!有关详细信息,请参阅我的原始帖子...有人对现在可能出现的问题有更好的了解吗?

标签: java php https outputstream illegalstateexception


【解决方案1】:

问题是你从不调用connect 方法。在第一个请求中,连接方法由 getInputStream() 方法调用。因此,要解决您的问题,将 conn.connect() 添加到您的 makeSecondRequest 方法就足够了。

【讨论】:

  • 很遗憾没有!我在第二种方法中添加了该行,但它对异常没有任何影响......不过,感谢您的回答。
【解决方案2】:

不要问我为什么,因为我不知道,但是,我实际上把第二种方法放在另一个类中,你知道什么,没有错误!

我现在不打算调查为什么,因为我想尽快完成我的软件,但如果有人想在这个问题上启发我,请成为我的客人 - 我将不胜感激!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 2019-03-23
    • 2014-11-09
    • 2016-11-01
    • 2013-01-19
    • 2012-06-23
    • 1970-01-01
    相关资源
    最近更新 更多