2013-02-14 56 views
3

很奇怪的问题,没有任何想法。也许你可以再次帮助 - 正如经常:)Java:服务器响应在存储到字符串时被切断?

我创建了一个简单的URLConnection并使用-POST方法。当我看到wireshark时,一切都发送给我。我尝试将响应存储到一个字符串中。该字符串是整个数据包的简短版本,而它是正确关闭的(使用/ html-tag)。

记事本中的差异给了我这样的:

<a href="wato.py?mode=..."></a> 

和Wireshark的:

<a href="wato.py?mode=edithost&amp;host=ColorPrinter ... muchmuchmore ... 

这是它似乎得到了切

真是很奇怪的东西的地方,现在这是我的代码:

public void uploadCsv(File csvFile) throws CsvImportException, IOException { 

    String sUrl = String.format(urlBaseWato, hostAddress); 

    String csvFileContent = readFile(csvFile); 

    ParamContainer params = new ParamContainer().addParam("a", "a") 
               .addParam("b", b) 
               .addParam("c", "c"); 

    URLConnection connection = new URL(sUrl).openConnection(); 

    postData(connection, params); 
    String resp = getResponse(connection); // <---- broken string here :(
    ... 
} 

-

private void postData(URLConnection con, ParamContainer params) throws IOException { 

    int cLen = params.getEncodedParamString().getBytes().length; 

    con.setDoInput(true); 
    con.setDoOutput(true); 
    con.setUseCaches (false); 

    con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
    con.setRequestProperty("Cookie", authCookie.toString()); 
    con.setRequestProperty("Content-Length", Integer.toString(cLen));  

    //Send request 

    DataOutputStream os = new DataOutputStream (con.getOutputStream()); 

    os.writeBytes(params.getEncodedParamString()); 
    os.flush(); 
    os.close(); 

} 

-

private String getResponse(URLConnection connection) throws IOException { 
    connection.connect(); 
    BufferedReader in = new BufferedReader(new InputStreamReader(
      connection.getInputStream())); 

    String line; 
    String response = ""; 

    while ((line = in.readLine()) != null)   
     response +=line; 

    in.close(); 

    return response; 
} 

神秘,我没有丝毫的想法。你可以帮我吗?

+0

IOUtils作品,未经断了线。想知道为什么,因为这是一个简单的实现获得没有额外的库的答复。在所有其他情况下,它都可以工作只是创建一个答案,然后我会投票。谢谢! – 2013-02-18 08:26:18

回答

1

是否使用IOUtils帮助吗?

URLConnection connection = new URL(sUrl).openConnection(); 
IOUtils.toString(connection.getInputStream(), "UTF-8"); 

甚至:

IOUtils.toString(new URL(sUrl), "UTF-8"); 

即使没有,总是认为这是首先要减少代码样板的量。

0

我想我应该做这一个答案的情况下,它的问题,可以得到接受。我见过关闭套接字的情况会切断已写入的流。尝试在套接字关闭前放置一个Thread.sleep(5000)。

+0

你试过这个,还是找到另一个答案? – arcy 2013-02-16 11:24:12