Java: how to use UrlConnection to post request with authorization? Java: how to use UrlConnection to post request with authorization? java java

Java: how to use UrlConnection to post request with authorization?


A fine example found here. Powerlord got it right, below, for POST you need HttpURLConnection, instead.

Below is the code to do that,

    URL url = new URL(urlString);    URLConnection conn = url.openConnection();    conn.setDoOutput(true);    conn.setRequestProperty ("Authorization", encodedCredentials);    OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());    writer.write(data);    writer.flush();    String line;    BufferedReader reader = new BufferedReader(new                                      InputStreamReader(conn.getInputStream()));    while ((line = reader.readLine()) != null) {      System.out.println(line);    }    writer.close();    reader.close();

Change URLConnection to HttpURLConnection, to make it POST request.

    HttpURLConnection conn = (HttpURLConnection) url.openConnection();    conn.setRequestMethod("POST");

Suggestion (...in comments):

You might need to set these properties too,

conn.setRequestProperty( "Content-type", "application/x-www-form-urlencoded");conn.setRequestProperty( "Accept", "*/*" );


I don't see anywhere in the code where you specify that this is a POST request. Then again, you need a java.net.HttpURLConnection to do that.

In fact, I highly recommend using HttpURLConnection instead of URLConnection, with conn.setRequestMethod("POST"); and see if it still gives you problems.


To do oAuth authentication to external app (INSTAGRAM) Step 3 "get the token after receiving the code" Only code below worked for me

Worth to state also that it worked for me using some localhost URL with a callback servlet configured with name "callback in web.xml and callback URL registered: e.g. localhost:8084/MyAPP/docs/insta/callback

BUT after successfully completed authentication steps, using same external site "INSTAGRAM" to do GET of Tags or MEDIA to retrieve JSON data using initial method didn't work. Inside my servlet to do GET using url like e.g. api.instagram.com/v1/tags/MYTAG/media/recent?access_token=MY_TOKEN only method found HERE worked

Thanks to all contributors

        URL url = new URL(httpurl);        HashMap<String, String> params = new HashMap<String, String>();        params.put("client_id", id);        params.put("client_secret", secret);        params.put("grant_type", "authorization_code");        params.put("redirect_uri", redirect);        params.put("code", code);  // your INSTAGRAM code received         Set set = params.entrySet();        Iterator i = set.iterator();        StringBuilder postData = new StringBuilder();        for (Map.Entry<String, String> param : params.entrySet()) {            if (postData.length() != 0) {                postData.append('&');            }            postData.append(URLEncoder.encode(param.getKey(), "UTF-8"));            postData.append('=');            postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));        }        byte[] postDataBytes = postData.toString().getBytes("UTF-8");        HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();        conn.setRequestMethod("POST");        conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");        conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));        conn.setDoOutput(true);        conn.getOutputStream().write(postDataBytes);        BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));        StringBuilder builder = new StringBuilder();        for (String line = null; (line = reader.readLine()) != null;) {            builder.append(line).append("\n");        }        reader.close();        conn.disconnect();        System.out.println("INSTAGRAM token returned: "+builder.toString());