3

非常に奇妙な問題です。何もわかりません。たぶんあなたは再び助けることができます-頻繁に:)

単純な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;
}

不思議なことに、私には少しも考えがありません。手伝って頂けますか?

4

2 に答える 2

1

ヘルプを使用していIOUtilsますか?

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

あるいは:

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

そうでない場合でも、コード内の定型文の量を減らすことを常に最初に検討してください。

于 2013-02-18T09:01:34.153 に答える
0

それが問題であり、受け入れられる場合に備えて、私はこれを答えるべきだと思います。ソケットを閉じると、そこにすでに書き込まれているストリームが切断される場合があります。ソケットクロージャーの直前にThread.sleep(5000)を配置してみてください。

于 2013-02-14T18:37:41.950 に答える