2017-09-27 10 views
1

私はクライアントアプリケーションを作成し、私はHttpClientを使用します。それは完全にjsonにラテンのシンボルを送信して取得しますが、jsonにロシア文字(同じリクエストアドレスとサーバー)を送信しようとすると、サーバーに要求は送信されません。 は、ここでは、コードです:HttpClientがrsonian文字のjsonでリクエストを送信しない

class RestApiClientBase { 

    static String _server; 
    static String _ssid; 
    final HttpClient _client = new HttpClient(); 
    static const _codec = const JsonEncoder.withIndent(" "); 

    RestApiClientBase() { 
    _client.badCertificateCallback = 
     (X509Certificate cert, String host, int port) => true; //for self-signed cert 
    } 

    void setServer(String serverNew) { 
    _server = serverNew; 
    } 

    void setSsid(String ssidNew) { 
    _ssid = ssidNew; 
    } 

    dynamic invokePost(String method, String data) async { 
    return await _client.postUrl(Uri.parse(_server + method)) 
     .then((HttpClientRequest request) async { 
     //print('11111111111111111111111'); 
     request.headers.contentType 
     = new ContentType("application", "json", charset: "utf-8"); 
     //print('22222222222222222222222'); 
     request.contentLength = data.length; 
     //print('33333333333333333333333'); 
     request.write(data); 
     //print('44444444444444444444444'); 
     return await request.close(); 
    }) 
     .then((HttpClientResponse response) async { 
     if (response.statusCode == 200) { 
     return response 
      .transform(UTF8.decoder) 
      .single; 
     } else { 
     String errorJson = RestApiClientBase._codec.convert(
      { 
       "status": "error", 
       "message": "Error code: ${response.statusCode}" 
      }); 
     return errorJson; 
     } 
    }).then((String answer) async { 
     var json = JSON.decode(answer); 
     rState.setRState(method, json["status"], json["message"]); 
     return json; 
    }); 
    } 
} 
class SecurityGroupClient extends RestApiClientBase { 
    dynamic getSGroups() async { 
    String json = RestApiClientBase._codec.convert(
     {"ssid": RestApiClientBase._ssid}); 
    return await invokePost("sgroup/list", json); 
    } 

    dynamic createSGroup(String name, String info) async { 
    String json = RestApiClientBase._codec.convert(
     {"ssid": RestApiClientBase._ssid, "name": name, "info": info}); 
    print(json); 
    return await invokePost("sgroup/create", json); 
    } 
} 

私はすべてのメッセージ(111222333444)を取得し、その後私は何かを得ることはありません。

{
"SSID": "6a3b1d12-cd4d-4962-ae06-34d36e31ac7e"、
"名前":ここ は、JSONの一例である "Тестоваягруппанарусском"、
「インフォメーション":"тест "
} サーバーはhttpsを使用します。

答えて

2

contentLengthが間違っているために起こります。デフォルトでは、コンテンツはUTF8でエンコードされています。実際にはデータ長!=文字列の長さです。コンソールアプリケーションを実行すると、例外がスローされます。

コンテンツサイズが指定した長さを超えています。

request.contentLength = UTF8.encode(data).length; 
:69のバイトは は38

を期待しながら、だから、エンコードされた長さを取得するための最良の解決策がある書か

関連する問題