HTTPServer Post参数

时间:2014-10-14 07:34:15

标签: java httpserver

使用HTTPServer包提供的com.sun.net.httpserver.HttpServer撰写服务。我需要将一些相当大的数据作为字节流发送到此服务(比如一百万个整数)。

我几乎搜索了所有可用的示例,都指向在URL中发送一个小的GET请求。 我需要知道如何将数据作为POST请求发送。 对于可以发送的数据是否有任何限制?

3 个答案:

答案 0 :(得分:1)

在上面的答案中,我建议使用Apache HTTPClient库(如果你没有使用Spring进行applet-servlet通信),而不是持久的URL连接。

http://hc.apache.org/httpclient-3.x/

在此,您可以构建一个客户端并将序列化对象(例如序列化为JSON字符串:https://code.google.com/p/google-gson/)作为POST请求通过HTTP发送到您的服务器:

public HttpResponse sendStuff (args) {
    HttpPost post = null;
    try {
        HttpClient client = HttpClientBuilder.create().build();

        post = new HttpPost(servletUrl);
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair(<nameString>, <valueString>));

        post.setEntity(new UrlEncodedFormEntity(params));

        HttpResponse response = client.execute(post);
        response.getStatusLine().getStatusCode();
        return response;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

然而,Spring为您节省了大量时间和麻烦,所以我建议check it out

答案 1 :(得分:1)

您可以通过将字节写入连接输出流来发送POST请求的数据,如下所示

public static String excutePost(String targetURL, String urlParameters)
{
    URL url;
    HttpURLConnection connection = null;    
    try {
        //Create connection
        url = new URL(targetURL);
        connection = (HttpURLConnection)url.openConnection();
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Content-Type", 
                 "application/x-www-form-urlencoded");

        connection.setRequestProperty("Content-Length", "" + 
                         Integer.toString(urlParameters.getBytes().length));
        connection.setRequestProperty("Content-Language", "en-US");    

        connection.setUseCaches (false);
        connection.setDoInput(true);
        connection.setDoOutput(true);

        //Send request
        DataOutputStream wr = new DataOutputStream (
                                connection.getOutputStream ());
        wr.writeBytes (urlParameters);
        wr.flush ();
        wr.close ();

        //Get Response  
        InputStream is = connection.getInputStream();
        BufferedReader rd = new BufferedReader(new InputStreamReader(is));
        String line;
        StringBuffer response = new StringBuffer(); 
        while((line = rd.readLine()) != null) {
            response.append(line);
            response.append('\r');
        }
        rd.close();
        return response.toString();

    } catch (Exception e) {
        e.printStackTrace();
        return null;

    } finally {

        if(connection != null) {
            connection.disconnect(); 
        }
    }
}

使用POST,可以发送的数据量没有限制。您可以在maximum length of HTTP GET request?

找到有关GET限制的详细信息

答案 2 :(得分:0)

如果我说得对,您希望在HTTPServer的指示下发送请求,作为GET请求,而不是使用帖子。

在HTTP客户端实现中,您可以设置HTTP标头以及请求方法:

HttpURLConnection connection = null;
    try {
        connection = (HttpURLConnection) url.openConnection();
        connection.setDoOutput(true);
        connection.setRequestMethod("GET"); //Or POST
} catch (IOException e) {
    e.printStacktrace();
}