Java 对Rails应用程序的HTTP POST请求失败
我尝试将HTTP POST请求从运行在Windows上的Java应用程序发送到运行在同一台计算机上的虚拟机上的Rails应用程序,但未成功。下面是来自Java端的HTTP POST请求以及在Rails端接收该请求的代码 请有人帮助我了解我哪里出了问题,特别是我可以在Rails方面做些什么来接收post请求 这是Java HTTP POST请求:Java 对Rails应用程序的HTTP POST请求失败,java,ruby-on-rails,post,request,Java,Ruby On Rails,Post,Request,我尝试将HTTP POST请求从运行在Windows上的Java应用程序发送到运行在同一台计算机上的虚拟机上的Rails应用程序,但未成功。下面是来自Java端的HTTP POST请求以及在Rails端接收该请求的代码 请有人帮助我了解我哪里出了问题,特别是我可以在Rails方面做些什么来接收post请求 这是Java HTTP POST请求: public void sendHTTPPOSTRequestReport(int c, int s){ try { //**********
public void sendHTTPPOSTRequestReport(int c, int s){
try {
//*****************************************************************************************
//JSON Object Created Here
JSONObject reportObject = new JSONObject();
reportObject.put("student_id", myClass[c].getStudentElement(s).getStudentNumber());
reportObject.put("student_name", myClass[c].getStudentElement(s).getName());
reportObject.put("school_name", getSchoolName());
reportObject.put("instructor_name", getInstructorName());
reportObject.put("course_name", myClass[c].getClassName());
reportObject.put("absent_days", String.valueOf(myClass[c].getStudentElement(s).getAbsences()));
reportObject.put("tardy_days", String.valueOf(myClass[c].getStudentElement(s).getTardies()));
reportObject.put("total_grade", String.valueOf(myClass[c].getStudentElement(s).getTotalGrade()));
JSONArray assignmentArray = new JSONArray();
for(int a=0; a<20; a++){
JSONObject assignmentObject = new JSONObject();
assignmentObject.put("assignment_name", myClass[c].getAssignmentElement(a).getName());
assignmentObject.put("assignment_date", String.valueOf(myClass[c].getAssignmentElement(a).getDate()));
assignmentObject.put("assignment_category",myClass[c].getAssignmentElement(a).getCategory());
assignmentObject.put("assignment_score", String.valueOf(myClass[c].getAssignmentElement(a).getGrade()));
assignmentArray.add(assignmentObject);
}
reportObject.put("assignments", assignmentArray);
System.out.println(reportObject);
//*******************************************************************************************
//Base64 Conversions
//name:password converts to bmFtZTpwYXNzd29yZA==
//“name:password” converts to Im5hbWU6cGFzc3dvcmQi
String basic = "Im5hbWU6cGFzc3dvcmQi";//HTTP Basic Authentication
String hostname = "192.168.80.2";//This is the static IP of the virtual machine.
InetAddress addr = InetAddress.getByName(hostname);
int port = 80;
Socket socket = new Socket(addr, port);
String path = "http://0.0.0.0:3000";
BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF8"));
wr.write("POST"+path+" HTTP/1.0rn");
wr.write("Authorization: Basic "+basic+"\r\n");
wr.write("Content-Length: "+((CharSequence) reportObject).length()+"rn");
//wr.write("Content-Type: application/x-www-form-urlencodedrn");
wr.write("Content-Type: application/json");
wr.write("rn");
// Send parameters
//wr.write(obj);//This was the format from an example but had to be modified as follows:
reportObject.writeJSONString(wr);
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 not close this socket but leave it open until program closes
}catch (Exception e) {e.printStackTrace();}
}
public void sendHTTPPOSTRequestReport(int c,int s){
试一试{
//*****************************************************************************************
//在此创建的JSON对象
JSONObject reportObject=新的JSONObject();
reportObject.put(“student_id”,myClass[c].getStudentElement.getStudentNumber());
reportObject.put(“student_name”,myClass[c].getStudentElement.getName());
put(“school_name”,getSchoolName());
put(“讲师姓名”,getInstructorName());
reportObject.put(“课程名称”,myClass[c].getClassName());
reportObject.put(“缺席天数”,String.valueOf(myClass[c].getStudentElement.getAbsences());
reportObject.put(“tardy_days”,String.valueOf(myClass[c].getStudentElement.getTardies());
reportObject.put(“total_grade”,String.valueOf(myClass[c].getStudentElement.getTotalGrade());
JSONArray assignmentArray=新的JSONArray();
对于(int a=0;aTo)首先,使用一个能够利用这项工作的框架,而不是使用普通套接字。请您更具体一点。还有其他类似的框架可以轻松地通过网络发送HTTP调用,因此您不必使用套接字之类的东西(在Java端)。除此之外,可能还有您的Webrick(或应用程序服务器)如果您托管的ROR应用程序未启动,则该应用程序未部署,或者您指向了错误的url。除了使用Java代码外,您还可以使用另一个工具发送类似于curl的HTTP调用来确保这一点。谢谢。我将检查url并阅读有关Apache HttpComponents的信息。我认为使用套接字是发送post REQUU所必需的est到运行在同一台计算机上的应用程序。我想您应该查询到192.168.80.2:3000。
class PostsController < ApplicationController
http_basic_authenticate_with name: "name", password: "password"
def index
render plain: "Text Goes Here!"
end
def edit
render plain: "Text Goes Here."
end
end