2011-01-24 4 views
1

Я отправляю запрос POST на мой сервер AppEngine. HttpServletRequest говорит мне:AppEngine: howto см. Содержимое с POST-запроса

POST /connexionDeconnexion HTTP/1.1 
User-Agent: Java/1.6.0_20 
Host: localhost:8888 
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 
Connection: keep-alive 
Content-Type: application/x-www-form-urlencoded 
Content-Length: 25 

Я послал мир «HelloHelloHelloHelloHello», который является правильным в соответствии с Content-Length. Однако я не знаю, как его восстановить. Можешь мне объяснить?

ответ

4

Как сказал Джигар, вы можете использовать request.getParameter(). Это работает, если вы действительно отправляете форму или указываете параметр как URL-адрес (http: // myhost/mypath? Myparam = myvalue).

Если вы отправляете свои данные в виде тела POST, вы должны прочитать его из своего тела, то есть получить поток ввода, вызвав request.getInputStream(), а затем прочитать из этого потока.

+0

'request.getParameter()' также будет работать если вы опубликуете способ, который я предложил. –

+0

И если я хочу отправить изображение и строку, что мне нужно сделать? Один объект на параметр? Два запроса? – g123k

1

Вы shoudl укажите имя и значение параметра, а затем вы можете извлечь параметр из объекта httpRequest.

request.getParameter("paramName");

Update

стороне клиента

String param = "value"; 
File textFile = new File("/path/to/file.txt"); 
File binaryFile = new File("/path/to/file.bin"); 
String boundary = Long.toHexString(System.currentTimeMillis()); // Just generate some unique random value. 

URLConnection connection = new URL(url).openConnection(); 
connection.setDoOutput(true); 
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary); 
PrintWriter writer = null; 
try { 
    OutputStream output = connection.getOutputStream(); 
    writer = new PrintWriter(new OutputStreamWriter(output, charset), true); // true = autoFlush, important! 

    // Send normal param. 
    writer.println("--" + boundary); 
    writer.println("Content-Disposition: form-data; name=\"param\""); 
    writer.println("Content-Type: text/plain; charset=" + charset); 
    writer.println(); 
    writer.println(param); 

    // Send text file. 
    writer.println("--" + boundary); 
    writer.println("Content-Disposition: form-data; name=\"textFile\"; filename=\"" + textFile.getName() + "\""); 
    writer.println("Content-Type: text/plain; charset=" + charset); 
    writer.println(); 
    BufferedReader reader = null; 
    try { 
     reader = new BufferedReader(new InputStreamReader(new FileInputStream(textFile), charset)); 
     for (String line; (line = reader.readLine()) != null;) { 
      writer.println(line); 
     } 
    } finally { 
     if (reader != null) try { reader.close(); } catch (IOException logOrIgnore) {} 
    } 

    // Send binary file. 
    writer.println("--" + boundary); 
    writer.println("Content-Disposition: form-data; name=\"binaryFile\"; filename=\"" + binaryFile.getName() + "\""); 
    writer.println("Content-Type: " + URLConnection.guessContentTypeFromName(binaryFile.getName()); 
    writer.println("Content-Transfer-Encoding: binary"); 
    writer.println(); 
    InputStream input = null; 
    try { 
     input = new FileInputStream(binaryFile); 
     byte[] buffer = new byte[1024]; 
     for (int length = 0; (length = input.read(buffer)) > 0;) { 
      output.write(buffer, 0, length); 
     } 
     output.flush(); // Important! Output cannot be closed. Close of writer will close output as well. 
    } finally { 
     if (input != null) try { input.close(); } catch (IOException logOrIgnore) {} 
    } 
    writer.println(); // Important! Indicates end of binary boundary. 

    // End of multipart/form-data. 
    writer.println("--" + boundary + "--"); 
} finally { 
    if (writer != null) writer.close(); 
} 

Также см

+0

Спасибо за ваш ответ. Если я отправил эту строку: writer = new OutputStreamWriter (conn.getOutputStream()); \t \t writer.write ("HelloHelloHelloHelloHello"); Каков параметр? При использовании режима отладки поле _parameters имеет значение NULL. Это нормально? – g123k

+0

проверить обновление .............. –

+0

Спасибо за ваш ответ. Если я хотел бы отправить фотографию (автомобиль) и строку («Chevrolet»), мне нужно отправить 2 запроса с двумя разными параметрами? Я знаю, что мой вопрос глуп, но документ об appengine очень маленький. – g123k