Java 对Rails应用程序的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 { //**********

我尝试将HTTP POST请求从运行在Windows上的Java应用程序发送到运行在同一台计算机上的虚拟机上的Rails应用程序,但未成功。下面是来自Java端的HTTP POST请求以及在Rails端接收该请求的代码

请有人帮助我了解我哪里出了问题,特别是我可以在Rails方面做些什么来接收post请求

这是Java HTTP POST请求:

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