Umesh Saraswat
Umesh Saraswat

Reputation: 570

HttpConnectionUrl always return status code 307

I am trying to hit a web service. it is working fine with android 4.4 or android 5.X. but when i am trying to hit "http://inmotion-prod.cloudapp.net:145/service1.svc/json/GetCustomerUUID" using android 4.1.1 it always returning me 307 status code. but this url is working fine with android 4.4 or 5.x. i also tried to hit other url it is working fine on android 4.1.1. so please tell me what is the problem

Log.i(TAG, url);
        String response = null;
        HttpURLConnection conn = null;
        try {
            URL webServiceUrl = new URL(url);
            conn = (HttpURLConnection) webServiceUrl
                    .openConnection();
            Log.i(TAG, "Connection open");
            conn.setRequestMethod(GET);
            conn.setConnectTimeout(CONNECTION_TIME_OUT);
            conn.setRequestProperty(CONTENT_TYPE, contentType);
            conn.setRequestProperty(ACCEPT_TYPE, acceptType);
            conn.setDoInput(true);
            conn.connect();
            Log.i(TAG, "Connection Connected");

            if (conn.getResponseCode() == HttpURLConnection.HTTP_OK && conn.getInputStream() != null) {
                response = StreamUtility.convertStreamToString(conn.getInputStream());
                conn.getInputStream().close();
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (conn != null) {
                conn.disconnect();
            }
        }

        return response;
    }

Upvotes: 2

Views: 2084

Answers (2)

AndyB
AndyB

Reputation: 588

BNK's answer helped, I fixed it like this so that it also works on newer devices (location header was returned as null / empty!)

String headerLocation = httpsUrlConnection.getHeaderField("Location");
logger.debug("Location header: " + headerLocation);

// if the redirect URL ends with a "/" sign, but the original URL does not, it's probably the redirect bug
String originalURL = url.toString();
if (!TextUtils.isEmpty(headerLocation) && headerLocation.endsWith("/") && !originalURL.endsWith("/"))
    {
    logger.info("Redirect Location differs from original URL, create new connection to: " + headerLocation);
    httpsUrlConnection = (HttpsURLConnection) new URL(headerLocation).openConnection();

    // optional
    httpsUrlConnection.setSSLSocketFactory(sslSocketFactory);
    }

Upvotes: 0

BNK
BNK

Reputation: 24114

Replace your URL address with http://inmotion-prod.cloudapp.net:145/service1.svc/json/GetCustomerUUID/ (pay attention to / at the end). The response code will be 200.


UPDATE:

With your current URL address (http://inmotion-prod.cloudapp.net:145/service1.svc/json/GetCustomerUUID) without / at the end, you can use the following code:

String address = "http://inmotion-prod.cloudapp.net:145/service1.svc/json/GetCustomerUUID";
URL url = new URL(address);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setInstanceFollowRedirects(false);
// if print out (debug or logging), you will see secondURL has / at the end
URL secondURL = new URL(urlConnection.getHeaderField("Location"));
HttpURLConnection urlConnection1 = (HttpURLConnection) secondURL.openConnection();

Then use urlConnection1.getResponseCode()

Hope it helps!

Upvotes: 2

Related Questions