Отправить многострочную строку через HTTP Post в Java - PullRequest
2 голосов
/ 21 августа 2011

Я хочу отправить почтовый запрос в какой-либо сервис, используя Java. Запросы должны содержать некоторые параметры, и одним из них является многострочная строка. Я пробовал много способов, но каждый раз я получаю весь текст в виде одной строки без символов новой строки. Есть идеи?

URL url = new URL("http://example.com/create");
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
String data = "param1=value&string=" + convertNewLineCharacters(text);
writer.write(data);
writer.flush();

// (...)
private String convertNewLineCharacters(String text) throws Exception  {
  String encodedString = URLEncoder.encode(text, "UTF-8");
  encodedString = encodedString.replaceAll("%0A", "\r\n");

  return encodedString;
}

Я ограничен стандартным Java Api, поэтому внешние библиотеки запрещены.

Ответы [ 2 ]

1 голос
/ 21 августа 2011
// ...
conn.setRequestProperty( "Content-Type", "application/x-www-form-urlencoded" ); // not sure it is important
// ...
writer.write(URLEncoder.encode(data, "UTF-8")); // urlencode the whole string and do not edit it
// ...
0 голосов
/ 21 августа 2011
package com.foo;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;

public class Foobar {
    public static void main(String...args) throws UnsupportedEncodingException {
        String text = URLEncoder.encode("Foo\nBar", "UTF-8");
        System.out.println(URLDecoder.decode(text, "UTF-8"));
    }
}

Выход: Foo
Bar

Просто декодируйте закодированные данные.URLEncoder#encode(String s, "UTF-8") будет кодировать в процентах любые символы за пределами зарезервированного набора.См. Кодировка символов в процентах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...