使用HTTPServer
包提供的com.sun.net.httpserver.HttpServer
撰写服务。我需要将一些相当大的数据作为字节流发送到此服务(比如一百万个整数)。
我几乎搜索了所有可用的示例,都指向在URL中发送一个小的GET
请求。
我需要知道如何将数据作为POST
请求发送。
对于可以发送的数据是否有任何限制?
答案 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();
}