HTTP POST请求到在同一台计算机上运行的应用程序?
问题描述:
我真的很感激有关如何在应用程序之间进行通信以帮助我解决困惑的知识的任何人。我花了很多时间试图弄清楚这一点。
我目前正在研究一个电子成绩册,其中包括允许用户在Java桌面应用程序中存储学生和成绩。我希望能够通过流将这些信息(作业名称,学生成绩等)通过流发送到Ruby on Rails SQLite3数据库。目的是让学生可以从Ruby on Rails应用程序访问与他们成绩相关的报告。我希望尽可能简化连接。 Java和Rails应用程序大都完成(尽管Rails SQLite3数据库需要进行标准化)。HTTP POST请求到在同一台计算机上运行的应用程序?
我正在考虑使用HTTP POST请求,比如我正在处理的一个请求,以将信息从Java发送到Rails数据库。我的问题如下:
由于Web应用程序CURRENTLY未连接到服务器,而是在虚拟机上运行,因此可以创建一个http请求,为了演示/测试目的,可以从Java连接到同一台计算机上的Rails应用程序?这个想法是希望我可以测试和演示运行在我自己的计算机上的Java和Ruby on Rails,然后最终使用相同的http请求或对它的修改来连接到服务器(当我最终部署基于Web的应用程序到服务器)。如果可以这样做,那么它将如何完成。而且,如果它不能完成,那么有什么替代方案。
import java.io.*;
import java.net.*;
public class HTTPPostRequestWithSocket {
public void sendRequest() {
try {
String params = URLEncoder.encode("param1", "UTF-8") + "="
+ URLEncoder.encode("value1", "UTF-8");
params += "&" + URLEncoder.encode("param2", "UTF-8") + "="
+ URLEncoder.encode("value2", "UTF-8");
String hostname = "nameofthewebsite.com";
int port = 80;
InetAddress addr = InetAddress.getByName(hostname);
Socket socket = new Socket(addr, port);
String path = "/nameofapp";
// Send headers
BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream(), "UTF8"));
wr.write("POST " + path + " HTTP/1.0rn");
wr.write("Content-Length: " + params.length() + "rn");
wr.write("Content-Type: application/x-www-form-urlencodedrn");
wr.write("rn");
// Send parameters
wr.write(params);
wr.flush();
// Get response
BufferedReader rd = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
System.out.println(line);
}
wr.close();
rd.close();
socket.close(); // Should this be closed at this point?
} catch (Exception e) {
e.printStackTrace();
}
}
}
答
重新“Web应用程序[...]在虚拟机上运行是有可能使的是,用于演示/测试的目的,可以从Java连接到一个HTTP请求Rails应用程序在同一台计算机上?“
由于在虚拟机配置中正确配置了网络,访客系统看起来像是普通主机(具有其自己唯一的MAC和IP地址)到网络上的任何其他主机。所以是的,这是可能的。
我很欣赏这种回应。但是需要修改哪些内容才能完成这项工作?由于HTML POST请求使用url来定位第二个应用程序,那么这不需要Rails应用程序从服务器运行? – Daron 2014-10-12 01:09:11
谢谢。这真的很有帮助。 – Daron 2014-10-12 01:28:27
@达隆对不起,我删除了我以前的评论,因为在反思之后,我认为这不是你要求的。如果有帮助,我会重复一遍。 如果我正确理解您的原始问题,Rails应用程序就是您的服务器应用程序,对不对?在VM guest虚拟机系统上运行此应用程序,并拥有服务器。 – 2014-10-12 01:38:35