HttpURLConnection发送POST请求两次

时间:2013-04-04 09:07:16

标签: android

自Android 4.0以来,使用HttpURLConnection是http请求的首选方式。

问题

发送POST请求时,我们有效,请求在大约4分钟的空闲时间后发送两次。

以下代码段会重现此问题:

public class MainActivity extends Activity {

  @Override
  protected void onCreate( Bundle savedInstanceState ) {
    super.onCreate( savedInstanceState );
    Button button = new Button( this );
    button.setText( "Perform POST request" );
    button.setOnClickListener( new OnClickListener() {

      @Override
      public void onClick( View v ) {

        new Thread( new Runnable() {

          @Override
          public void run() {
            makePostRequest();
          }

        } ).start();
      }
    } );
    setContentView( button );
  }

  private void makePostRequest() {
    try {
      String target = "http://server.com/path";
      System.out.println( "Sending POST request: " + target );
      URL url = new URL( target );
      HttpURLConnection conn = ( HttpURLConnection )url.openConnection();
      conn.setDoOutput( true );
      System.out.println( "Response: " + conn.getResponseCode() );
    } catch( Exception e ) {
      e.printStackTrace();
    }
  }
}

重现:按下按钮。等四分钟。再次按下按钮。第二个按钮点击的POST请求被发送到服务器两次。

这个问题似乎只出现在Android 4.1及更高版本上。无法在4.0上重现它。

解决方案

解决了我们将系统属性http.keepAlive设置为false的问题。因此,POST请求仍然发送“Connection:keep-alive”头参数,但HttpURLConnection在4分钟空闲时间后不会尝试重新发送POST请求。

打开问题

这是Android上url连接的预期行为吗?我认为永远不会重试POST请求。必须配置它(通过系统属性)非常容易出错。

0 个答案:

没有答案