2016-05-31 2 views
2

Я пытался обрабатывать запросы POST из файла java на сервер PLAY. На сервере я печатаю параметры как request().body().asText(), который работает, если я использую команду curl в терминале. Однако, если я пытаюсь использовать POST с использованием java-файла, он всегда печатает null. Я пробовал несколько примеров с этого сайта, но он всегда печатает null. (Я верю, что возвращаю обратно, поэтому я подключился к серверу).Параметры запроса почты в Java не работают

import java.lang.*; 
import java.net.*; 
import java.io.*; 
import java.util.*; 

public class javaa{ 
public static void main(String[] args){ 
    try{ 
      String urlParameters = "param1=a&param2=b&param3=c"; 
      URL url = new URL("http://localhost:9000/createPerson"); 
      HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

      conn.setDoOutput(true); 

      OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream()); 

      writer.write(urlParameters); 
      writer.flush(); 

      String line; 
      BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

      while ((line = reader.readLine()) != null) { 
       System.out.println(line); 
      } 
      reader.close(); 
      writer.close(); 
      conn.disconnect(); 
    } 
    catch(Exception e){ 
      System.out.println(e); 
    } 
} 
} 

ответ

0

Вы забыли установить метод POST действительно по умолчанию это GET, это может быть сделано путем добавления

conn.setRequestMethod("POST"); 

Вы также должны установить тип содержимого application/x-www-form-urlencoded в следующем:

conn.addRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 

Вы также должны указать серверу размер вашего тела следующим образом:

byte[] requestBody = urlParameters.getBytes("UTF-8"); 
conn.setFixedLengthStreamingMode(requestBody.length); 

Итак, наконец, код будет выглядеть следующим образом:

conn.setRequestMethod("POST"); 
conn.addRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
byte[] requestBody = urlParameters.getBytes("UTF-8"); 
conn.setFixedLengthStreamingMode(requestBody.length); 
try (OutputStream out = conn.getOutputStream()) { 
    out.write(requestBody); 
    out.flush(); 
} 

Ответ Обновление

В соответствии с вашими комментариями следует повторить с:

conn.addRequestProperty("Content-Type", "text/plain"); 

вместо:

conn.addRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
+0

Я попробовал то, что вы предложили, но он по-прежнему возвращает «null». – Lothar

+0

попытайтесь вызвать writer.close(); после writer.flush() –

+0

Выход по-прежнему равен нулю. Я только что заметил, может быть, не ясно, что выход «нулевой», который является проблемой, находится на стороне сервера, который печатает «request(). Body(). AsText()». – Lothar

Смежные вопросы