如何使用GZIP压缩Http Post Body

时间:2016-01-06 23:41:28

标签: java apache httpclient resteasy

我和我的团队有一台运行Restfull webservice的Tomcat服务器,使用RestEasy实现:

public class Final1 extends Activity {

Button btn;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.final1);

    Bundle bundle = getIntent().getExtras();

    TextView textView = (TextView)findViewById(R.id.txt);
    textView.setText(bundle.getCharSequence("rg"));

    Bundle bundle1 = getIntent().getExtras();
    TextView textView1 = (TextView)findViewById(R.id.txt1);
    textView.setText(bundle1.getCharSequence("rg1"));

    Bundle bundle2 = getIntent().getExtras();
    TextView textView2 = (TextView)findViewById(R.id.txt2);
    textView.setText(bundle2.getCharSequence("rg2"));

    Bundle bundle3 = getIntent().getExtras();
    TextView textView3 = (TextView)findViewById(R.id.txt3);
    textView.setText(bundle3.getCharSequence("rg3"));

    Bundle bundle4 = getIntent().getExtras();
    TextView textView4 = (TextView)findViewById(R.id.txt4);
    textView.setText(bundle4.getCharSequence("rg4"));

    Bundle bundle5 = getIntent().getExtras();
    TextView textView5 = (TextView)findViewById(R.id.txt5);
    textView.setText(bundle5.getCharSequence("rg5"));

    Bundle bundle6 = getIntent().getExtras();
    TextView textView6 = (TextView)findViewById(R.id.txt6);
    textView.setText(bundle6.getCharSequence("rg6"));

    btn = (Button)findViewById(R.id.restartBtn);

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent in = new Intent(v.getContext(), Quiz.class);
            startActivityForResult(in, 0);
        }
    });

  }

}

我们需要为此服务制作压缩帖子。问题是我们找不到有效的实现。

  

HTTP / 1.1 400错误请求[内容编码:gzip,内容类型:   为text / html; charset = UTF-8,日期:星期四,07 Jan 2016 10:07:05 GMT,服务器:   Apache-Coyote / 1.1,Content-Length:66,Connection:keep-alive]

我们没有想法,这是一个简单的HTTP客户端功能。有什么想法吗?

OBS:这是RestEasy代理:

@POST
@GZIP
@Path("/capture")   
@Consumes(MediaType.APPLICATION_JSON)
Response RecieveData(@GZIP RecievingData recievingData);

编辑:防火墙中有一些更改,第三种方法更改为错误400.

2 个答案:

答案 0 :(得分:0)

如果使用Tomcat,为什么不添加一个RequestFilter来预处理包含标题Content-Encoding的接收请求:gzip并在其余的过滤链处理它之前将其解压缩?

编辑: 我猜你的第三个选项实际上可能有效(窥探网络验证),问题是你从服务器得到 403 - 禁止响应。这是授权问题,而不是URL,请求编码或其他任何问题。 GZIP现在可能正在为你工作。

编辑: HTTP响应代码400的最新输出 - 错误请求显示内容类型:text / html。 Controller期望Content-Type:application / json,因此客户端没有按照Controller的要求设置ContentType。重新检查您的客户端代码的使用和配置。

答案 1 :(得分:0)

最后,我使用Resteasy框架为服务器和客户端实现GZIP压缩。

服务器端: https://docs.jboss.org/resteasy/docs/2.3.0.GA/userguide/html/gzip.html

客户端: https://docs.jboss.org/resteasy/docs/2.2.1.GA/userguide/html/RESTEasy_Client_Framework.html

这对我有用。