2011-08-21 67 views
2

我想发送发布请求到一些使用Java的服务。请求必须包含一些参数,其中一个是多行String。我尝试了很多方法,但每次我最终都会将整行文本作为单行提交,而没有换行符。有任何想法吗?通过HTTP发送多行字符串发布在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,因此不允许使用外部库。

回答

1
// ... 
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

这一个不工作。我早些时候测试过它。 –

+0

也许错误是在接收表单的应用程序的另一边。你会告诉我们这个代码吗? – aalku

+0

这不是我的web应用程序,所以源代码不可用:) url:[link](http://pastie.org/pastes/new)。我甚至尝试用Firefox插件发布请求,但我仍然得到单线。 –

0
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")); 
    } 
} 

输出: 富
酒吧

刚刚解码编码数据。 URLEncoder#encode(String s, "UTF-8")将百分比编码保留集外的任何字符。见Percent encoding of character data.

+0

是的,但我恐怕不是这样。我所需要的就是如何使用POST发送多行字符串,以便接收此消息的Web应用程序将其视为发布在textarea中的多行文本。 –

+1

接收此POST **的“网络应用程序”必须在使用之前将其解码。设置正确的内容类型,如@ user270349所示。 –