确定 HTTP 的大小 POST

Determine size of HTTP POST

我正在编写一个应用程序,它将发送 idlatitudelongitude使用 HTTP POST 到服务器。该应用程序将使用用户数据。有没有办法在我发送之前确定 post 的字节大小?

   @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    TextView tvLatLong = (TextView) findViewById(R.id.tvLatLong);
    LocationServices.startUpdates(this, tvLatLong);

    Button btnPost = (Button) findViewById(R.id.btnSend);
    btnPost.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            id = 1;
            latitude = LocationServices.getLatitude();
            longitude = LocationServices.getLongitude();

            Log.i("USER ID ::", id + "");
            Log.i("USER LATITUDE ::", latitude + "");
            Log.i("USER LONGITUDE ::", longitude + "");

            List<NameValuePair> list = new ArrayList<NameValuePair>();
            list.add(new BasicNameValuePair("keyId", id + ""));
            list.add(new BasicNameValuePair("latitude", latitude + ""));
            list.add(new BasicNameValuePair("longitude", longitude + ""));

            post(list);
        }
    });


}

private void post(List<NameValuePair> list) {
    HttpClient client = new DefaultHttpClient();
    HttpPost post = new HttpPost("http://dmark3.apsu.edu");

    try{
        post.setEntity(new UrlEncodedFormEntity(list));


        HttpResponse response = client.execute(post);

        Log.i("HTTP RESPONSE :: ", response.toString());
    } catch (Exception e) {
        e.printStackTrace();
    }


}

上面是代码。

确实没有直接的方法来测量发送到服务器的 http 请求的大小 - 主要是因为整个请求没有在您的程序中组装(您将在程序中计算请求的大小) .将有其他 headers 添加到您的请求中,它们是 HTTP 协议的一部分。由于证书等原因,HTTPS 也使流程复杂化。

这里有一个答案 (Calculate HTTPS POST Request size),它讨论了创建您自己的自定义套接字工厂,该工厂计算输出流的大小并保持 运行 总大小,但我'我不确定你是否想走那条路。