2014-10-14 1 views
2

Я пишу услугу, используя HTTPServer, предоставленную пакетом com.sun.net.httpserver.HttpServer. Мне нужно отправить некоторые важные данные в виде потока байтов в эту службу (скажем, миллион целых чисел).HTTPServer Параметры сообщения

Я почти обыскал все доступные примеры, все указывают на отправку небольшого GET запроса в URL-адрес. Мне нужно знать, как отправить данные в виде запроса POST. Также существует ли ограничение на данные, которые можно отправить?

Просьба помочь. Благодарю.

ответ

1

Вместо того постоянного соединения URL в ответе выше, я бы рекомендовал использовать Apache HTTPClient библиотеки (если вы не используете Spring для апплет-сервлет связи)

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 позволяет сэкономить много времени и хлопот, так Я хотел бы посмотреть на это: docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/remoting.html

0

Если я прав, вы хотите отправить запросы в направлении своего HTTPServer, как запрос GET, вместо использования сообщения.

В вашей реализации HTTP Client можно установить заголовки HTTP, а также метод запроса:

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

С наилучшими пожеланиями

+0

Нет, это абсолютно противоположное. Я хочу, чтобы данные были отправлены как POST, а также значимые данные. – LPD

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 нет ограничений на количество данных, которые могут быть отправлены. Вы можете узнать подробности об ограничениях GET здесь maximum length of HTTP GET request?