在Java中向同一个PHP脚本发送两个不同的请求
我正在尝试制作一个与我在线的 PHP 脚本进行通信的 Java 应用程序!我的应用程序发出一个请求来接收一些数据,然后处理它并向脚本发出另一个请求。但是,第二个请求根本不起作用,即使我 close()
OutputStreamWriter
、BufferedReader
和 HttpsUrlConnection< /code> 第一个请求!
我知道这不是请求不起作用,因为我先发送了它,它起作用了!而且我还知道第二个请求的方法正在运行。以下是我目前所掌握的基础知识:
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();
}
所以,如果有人知道应该如何完成/为什么它可能不起作用,如果您能尽快告诉我,我将不胜感激......
提前致谢
更新: 我现在已在 我的 代码的 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)
I am trying to make a Java application that communicates with a PHP script I have online! My application makes one request to receive some data, then processes it and makes another request to the script. However, the second request does not work at all, even though I close()
the OutputStreamWriter
, the BufferedReader
and the HttpsUrlConnection
for the first request!
I know it's not the request that it is not working because I send it before anything else, it works! And I also know that the method with the second request in is running. Here is the basics of what I have at the minute:
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();
}
So, if anyone knows how this SHOULD be done/why it may not be working I would be grateful if you could tell me as soon as possible...
Thanks in advance
UPDATE:
I have now added e.printStackTrace()
in the catch
statement in the makeSecondRequest()
part of my code and I receive the following:
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)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
问题是您永远不会调用 连接 方法。在第一个请求中,getInputStream() 方法调用 connect 方法。因此,要解决您的问题,将 conn.connect() 添加到 makeSecondRequest 方法中就足够了。
The problem is that you never call the connect method. In the first request the connect method is called by the getInputStream() method. So to fix your problem it should be enough to add conn.connect() to your makeSecondRequest method.
不要问我为什么,因为我不知道,但是,我实际上将第二种方法放入另一个类中,你知道吗,没有错误!
我现在不打算调查原因,因为我想尽快完成我的软件,但如果有人想在这个问题上启发我,请成为我的客人 - 我将不胜感激!
Don't ask me why because I have no idea, but, I put the second method practically as it was into another class and what do you know, no errors!
I'm not going to investigate as to why at the minute because I want to get my software finished as soon as possible, but if anybody wants to enlighten me on the subject be my guest - I'd be grateful!