HttpURLConnection.getResponseCode () retorna -1 na segunda chamada

Eu pareço estar correndo em um problema peculiar no Android 1.5 quando uma biblioteca que estou usando (sinalização 1.1-SNAPSHOT), faz duas conexões consecutivas para um servidor remoto. A segunda conexão sempre falha com umHttpURLConnection.getResponseCode() do-1

Aqui está um testcase que expõe o problema:

// BROKEN
public void testDefaultOAuthConsumerAndroidBug() throws Exception {
    for (int i = 0; i < 2; ++i) {
        final HttpURLConnection c = (HttpURLConnection) new URL("https://api.tripit.com/oauth/request_token").openConnection();
        final DefaultOAuthConsumer consumer = new DefaultOAuthConsumer(api_key, api_secret, SignatureMethod.HMAC_SHA1);
        consumer.sign(c);                             // This line...
        final InputStream is = c.getInputStream();
        while( is.read() >= 0 ) ;                     // ... in combination with this line causes responseCode -1 for i==1 when using api.tripit.com but not mail.google.com
        assertTrue(c.getResponseCode() > 0);
    }
}

Basicamente, se eu assinar a solicitação e, em seguida, consumir todo o fluxo de entrada, a próxima solicitação falhará com um resultado de -1. A falha não parece acontecer se eu acabei de ler um caractere do fluxo de entrada.

Observe que isso não acontece em nenhuma URL - apenas URLs específicos, como a acima.

Além disso, se eu alternar para usar o HttpClient em vez de HttpURLConnection, tudo funcionará bem:

// WORKS
public void testCommonsHttpOAuthConsumerAndroidBug() throws Exception {
    for (int i = 0; i < 2; ++i) {
        final HttpGet c = new HttpGet("https://api.tripit.com/oauth/request_token");
        final CommonsHttpOAuthConsumer consumer = new CommonsHttpOAuthConsumer(api_key, api_secret, SignatureMethod.HMAC_SHA1);
        consumer.sign(c);
        final HttpResponse response = new DefaultHttpClient().execute(c);
        final InputStream is = response.getEntity().getContent();
        while( is.read() >= 0 ) ;
        assertTrue( response.getStatusLine().getStatusCode() == 200);
    }
}

encontreireferências para o que parece ser um problema semelhante em outros lugares, mas até agora não há soluções. Se eles são realmente o mesmo problema, então o problema provavelmente não está com a indicação, já que as outras referências não fazem nenhuma referência a ele.

Alguma ideia?

questionAnswers(5)

yourAnswerToTheQuestion