如何使用java执行post调用

时间:2013-05-17 08:44:36

标签: java html

我在html下面使用我的服务器api(其余)

<html>

    <body>
        <form method="post" action="http://localhost:8080/service/uploadFile" enctype="multipart/form-data">
            <input type="file" name="file"/>
            <input type="submit"/>
            <input type="hidden" name="smallSize" value="50x50">
        </form>
    </body>
</html>

如何使用java方法调用此api?

2 个答案:

答案 0 :(得分:4)

可能以下行可以帮到你。我正在使用Apache Http api。

HttpClient client = new DefaultHttpClient();
    client.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);     
    HttpPost    post   = new HttpPost( "http://localhost:8080/service/uploadFile"));
    MultipartEntity entity = new MultipartEntity( HttpMultipartMode.BROWSER_COMPATIBLE );
    StringBody size= new StringBody("50x50");
    entity.addPart("smallSize", size);
    entity.addPart("file", new FileBody(new File("D:/abc.txt") ));
    post.setEntity(entity);

    HttpResponse response = client.execute(post);
    String responseFromServer = EntityUtils.toString(response.getEntity(), "UTF-8" );
    client.getConnectionManager().shutdown();
    System.out.println("response from server: "+responseFromServer);

根据您的请求类型,HttpPostHttpGet类可用。对于发送文件,我们需要使用MultipartEntity类。如果您想像其他元数据一样发送其他表单字段和FileBody,则可以使用StringBody

我希望这可以帮到你一点点。 :)

答案 1 :(得分:0)

您可以使用套接字使用端口80上该表单的地址来模拟POST请求

    String data = URLEncoder.encode("key1", "UTF-8") + "=" + URLEncoder.encode("value1", "UTF-8");

    Socket socket = new Socket("127.0.0.1", 80);

    String path = "/servlet";
    BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF8"));
    wr.write("POST " + path + " HTTP/1.0\r\n");
    wr.write("Content-Length: " + data.length() + "\r\n");
    wr.write("Content-Type: application/x-www-form-urlencoded\r\n");
    wr.write("\r\n");

    wr.write(data);
    wr.flush();

    BufferedReader rd = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    String line;
    while ((line = rd.readLine()) != null) {
      System.out.println(line);
    }
    wr.close();
    rd.close();

取自HERE

的示例