HTML POST 在参数中插入换行符
HTML POST insert line break in parameters
目前我正在尝试使用 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;
}
}
首先,我建议使用高级库来调用最明显的 RESTful WebService。 Jersey -JAX-RS 的参考实现 - 应该足够了。
仅当由于某种原因无法做到这一点时,您才需要确定 Web 服务支持或采用的编码。显然,在您的情况下,这是默认值 application/x-www-form-urlencoded
。用 +
字符替换空格,用其 URL 编码替换集 [0-9A-Za-z]
之外的任何字符(%HH
与 HH 十六进制 ASCII 数值)。
Class java.net.URLEncoder
将为您完成这项工作,没有理由不使用它。
我不确定这是编码错误还是 HttpURLConnection 的默认编码方法是什么,但也许它没有正确编码 \n。
我相信 ASCII 换行符是
%0A
也许尝试使用
URLEncoder.encode(code)
目前我正在尝试使用 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;
}
}
首先,我建议使用高级库来调用最明显的 RESTful WebService。 Jersey -JAX-RS 的参考实现 - 应该足够了。
仅当由于某种原因无法做到这一点时,您才需要确定 Web 服务支持或采用的编码。显然,在您的情况下,这是默认值 application/x-www-form-urlencoded
。用 +
字符替换空格,用其 URL 编码替换集 [0-9A-Za-z]
之外的任何字符(%HH
与 HH 十六进制 ASCII 数值)。
Class java.net.URLEncoder
将为您完成这项工作,没有理由不使用它。
我不确定这是编码错误还是 HttpURLConnection 的默认编码方法是什么,但也许它没有正确编码 \n。
我相信 ASCII 换行符是
%0A
也许尝试使用
URLEncoder.encode(code)