HTML POST在参数中插入换行符

时间:2015-03-02 21:28:48

标签: java html post line newline

目前我正在尝试使用hilite.me/api来格式化Java代码。一切正常,但唯一的问题是\n换行似乎被忽略,输出只是一条长线。任何人都知道我如何正确地将换行符传递给POST请求。谢谢。 API的参数应该如下:code=要输入的Java代码。要格式化的lexer=语言(在本例中为Java)

我的代码:

public static final String USER_AGENT = "Mozilla/5.0", HILITE_URL = "http://hilite.me/api";

public static String hilite(String lang, String code) throws Exception {
    URL obj = new URL(HILITE_URL);
    HttpURLConnection conn = (HttpURLConnection) obj.openConnection();

    conn.setRequestMethod("POST");
    conn.setRequestProperty("User-Agent", USER_AGENT);

    String par = "&code=" + code.replaceAll("\n", "\r\n") + "&?lexer=" + lang;

    conn.setDoOutput(true);
    DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
    dos.writeBytes(par);
    dos.flush();
    dos.close();

    int res = conn.getResponseCode();

    if(res == 200){
        StringBuilder sb = new StringBuilder();
        String in;
        BufferedReader read = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        while((in = read.readLine()) != null)
            sb.append(in + "\n");
        read.close();
        return sb.toString();
    }else{
        System.err.println("UNABLE TO CONNECT! WITH RES: " + res);
        return null;
    }
}

2 个答案:

答案 0 :(得分:0)

首先,我建议使用高级库调用最明显的RESTful WebService。泽西岛 - JAX-RS-的参考实现应该足够了。

只有出于某种原因,这是不可能的,您才需要确定Web服务支持或假设的编码。显然,在您的情况下,这是默认的application/x-www-form-urlencoded。将+个字符和集合[0-9A-Za-z]之外的任何字符替换为其URL编码(%HH,其中HH为十六进制ASCII数值)。

班级java.net.URLEncoder将为您完成这项工作,没有理由不使用它。

答案 1 :(得分:0)

我不确定这是编码错误还是HttpURLConnection的默认编码方法,但可能没有正确编码\ n。

我相信ASCII换行是

%0A

也许尝试使用

URLEncoder.encode(code)