I am using OKHTTP3 to make a POST request to my server code. It returns 401 UNAUTHORIZED error. However, the same thing works on POSTMAN. The only difference between POSTMAN and my code may be a session cookie (which I am passing as a header). Below is my code
import java.io.*;
import java.net.*;
import java.util.HashMap;
import java.util.Map;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import okhttp3.*;
import org.json.JSONObject;
public class Main
{
public static final String SESSION_URL = "http://localhost:8080/security/rest/token/access/session/0";
public static final String CREATE_PROJECT_URL = "http://localhost:8080/managers/CDQRuntime/smartdq/training/";
public static String PROJECT_NAME = "testproject201234";
static String MANAGEMENT_TOKEN="YWRtaW46YWRtaW4=";
public static void main(String[]args) throws IOException
{
//Get session api call
Request request = new Request.Builder()
.url(SESSION_URL)
.get()
.addHeader("Authorization", "Basic " + MANAGEMENT_TOKEN)
.build();
OkHttpClient client=new OkHttpClient();
Response response = client.newCall(request).execute();
String serverResponse = response.body().string();
System.out.println(serverResponse);
JSONObject responseMap = new JSONObject(serverResponse);
System.out.println(responseMap);
String accessToken=(String)responseMap.get("access_token");
System.out.println(accessToken);
//Create Project api call
JSONObject createProjectCallBody = new JSONObject();
MediaType JSON = MediaType.parse("application/json");
createProjectCallBody.put("projectState","Initial");
createProjectCallBody.put("projectName", PROJECT_NAME);
createProjectCallBody.put("projectDescription","this is a test");
RequestBody body = RequestBody.create(JSON, createProjectCallBody.toString());
request = new Request.Builder()
.url(CREATE_PROJECT_URL)
.post(body)
.addHeader("Authorization","Bearer "+accessToken)
.addHeader("Content-Type","application/json").
addHeader("SESSION", responseMap.get("session").toString())
.build();
System.out.println(request.headers().toString());
client=new OkHttpClient();
response = client.newCall(request).execute();
System.out.println(response);
}
private static Map<String, Object> getStringObjectMap(String content)
{
return new Gson().fromJson(
content, new TypeToken<HashMap<String, Object>>() {}.getType()
);
}
}
Below is the link to working postman response
authoriation and other headers in POSTMAN request Here is the body in postman Body sent in the POSTMAN request
After the various Sys outs, below is the console log, which shows the code is failing on the second api call, the token extracted from first response is correct
{"access_token":"eyJjdHkiOiJKV1QiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiZGlyIn0..LppdczJz8iUazAT1MXF7wg.vu6sPxXGhvWUjujS8u67zfYSF9zWWXibsk8iyiDag3kXT63Q_fMVusPyIJWabbS-Aa3OS_jcWMI8veKu2kIKC_fTGn2VjfU4Rs4Gt4L95PnJnmeH11AxJi2z9Lq_dw35hVWQBWJZjhucihvb7A5p0z7vroa-5boeXHUJPg1qcfL_9S8ab91hIy2aBry4h_QSqOXp1hD22pE7KcrRFnbc3JoDhnoL9iBZQXXiUXyw9Cvce8krIkeD7_aZCIF7NVz66xZ9WKly3-OQDvR94EG4rTwAPAo8z2Zc6ioQSSdQWvXhij5V97Pjk4UPjHBP1kJxhC2y-aPfMBjnWZ0lhXtb7CfSsDwVKUl7egczsaL4-CQ3a_u9ptpDoXwXvQCTLChRbGkxaV4Lmhm7jbwaHo00xHpUP2XlPnaj7wNtqWDxZwJOUk5GVy4qGlnqpMhyJ-0YONcBxSOIcxSSZGR95h_ceiMHF4f2XDmosv-iIBvl8NuX_VC_atlsJ1_6DRPCFDR-X-p3oKWaLgwtH1JGv5F-bo9SeM6EeV9AE5PEweabiN9UtI72zuQKtiCa-1p690yWqK7F-CmZTNij4EZV7knleHoDdQ3SZhNPFnuybkq-0v8JJM2bPlkfzmxhSLIOzY87BcynHIVBPcXFt5FvBvFvzSKd1nhYMynfzuOsrq90Q3f-6k9WKvHAYhpJKNAkhGNWs11jgHAUrPS85Yub3kLEHMICunOKtVgwTSsjmkpMfd6QskIpdc17WWzCXg7XiKeCzNFyDpP6KNzQ0mHqw59ou0XMVByLZwDAeZIe00ix3kqVyI3o9ZIz0hZT5gs3OHzHDLOlYzq0TUB9qI3iucotmLgrX_nHP_FoR1wSmhe0xDnVQxWMRJksiu82cwyIqXtcMREMkn5Wyl4R5njfbickT-cpZ5Ru4v9twF2KAKknjDArNg7vyFbZEK9_TUsaLJzzF6N8-XOvWoibavCbeFXxd7fMaxTkMVYukNk1nXJOJQs_qPBL7ipJ3aMRBLofOF25Nf2KtSTaKC5COjOY0DrKaZ-FgNgN45S1NA45Ii4y-7BS40f7nrwruBM7SkFEZ5U_YtWMevKqKXvB12oj8WLRHmMtPYseLGBNSAS-QSZMYqZK3x36vGeTbVRdxlQ8UsjN.H8gItdZ6gh4z4g82KIDMbQ","session":"64b9f9c9-e994-474f-8106-bdbe22845dfd","username":"admin"}
{"access_token":"eyJjdHkiOiJKV1QiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiZGlyIn0..LppdczJz8iUazAT1MXF7wg.vu6sPxXGhvWUjujS8u67zfYSF9zWWXibsk8iyiDag3kXT63Q_fMVusPyIJWabbS-Aa3OS_jcWMI8veKu2kIKC_fTGn2VjfU4Rs4Gt4L95PnJnmeH11AxJi2z9Lq_dw35hVWQBWJZjhucihvb7A5p0z7vroa-5boeXHUJPg1qcfL_9S8ab91hIy2aBry4h_QSqOXp1hD22pE7KcrRFnbc3JoDhnoL9iBZQXXiUXyw9Cvce8krIkeD7_aZCIF7NVz66xZ9WKly3-OQDvR94EG4rTwAPAo8z2Zc6ioQSSdQWvXhij5V97Pjk4UPjHBP1kJxhC2y-aPfMBjnWZ0lhXtb7CfSsDwVKUl7egczsaL4-CQ3a_u9ptpDoXwXvQCTLChRbGkxaV4Lmhm7jbwaHo00xHpUP2XlPnaj7wNtqWDxZwJOUk5GVy4qGlnqpMhyJ-0YONcBxSOIcxSSZGR95h_ceiMHF4f2XDmosv-iIBvl8NuX_VC_atlsJ1_6DRPCFDR-X-p3oKWaLgwtH1JGv5F-bo9SeM6EeV9AE5PEweabiN9UtI72zuQKtiCa-1p690yWqK7F-CmZTNij4EZV7knleHoDdQ3SZhNPFnuybkq-0v8JJM2bPlkfzmxhSLIOzY87BcynHIVBPcXFt5FvBvFvzSKd1nhYMynfzuOsrq90Q3f-6k9WKvHAYhpJKNAkhGNWs11jgHAUrPS85Yub3kLEHMICunOKtVgwTSsjmkpMfd6QskIpdc17WWzCXg7XiKeCzNFyDpP6KNzQ0mHqw59ou0XMVByLZwDAeZIe00ix3kqVyI3o9ZIz0hZT5gs3OHzHDLOlYzq0TUB9qI3iucotmLgrX_nHP_FoR1wSmhe0xDnVQxWMRJksiu82cwyIqXtcMREMkn5Wyl4R5njfbickT-cpZ5Ru4v9twF2KAKknjDArNg7vyFbZEK9_TUsaLJzzF6N8-XOvWoibavCbeFXxd7fMaxTkMVYukNk1nXJOJQs_qPBL7ipJ3aMRBLofOF25Nf2KtSTaKC5COjOY0DrKaZ-FgNgN45S1NA45Ii4y-7BS40f7nrwruBM7SkFEZ5U_YtWMevKqKXvB12oj8WLRHmMtPYseLGBNSAS-QSZMYqZK3x36vGeTbVRdxlQ8UsjN.H8gItdZ6gh4z4g82KIDMbQ","session":"64b9f9c9-e994-474f-8106-bdbe22845dfd","username":"admin"}
eyJjdHkiOiJKV1QiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiZGlyIn0..LppdczJz8iUazAT1MXF7wg.vu6sPxXGhvWUjujS8u67zfYSF9zWWXibsk8iyiDag3kXT63Q_fMVusPyIJWabbS-Aa3OS_jcWMI8veKu2kIKC_fTGn2VjfU4Rs4Gt4L95PnJnmeH11AxJi2z9Lq_dw35hVWQBWJZjhucihvb7A5p0z7vroa-5boeXHUJPg1qcfL_9S8ab91hIy2aBry4h_QSqOXp1hD22pE7KcrRFnbc3JoDhnoL9iBZQXXiUXyw9Cvce8krIkeD7_aZCIF7NVz66xZ9WKly3-OQDvR94EG4rTwAPAo8z2Zc6ioQSSdQWvXhij5V97Pjk4UPjHBP1kJxhC2y-aPfMBjnWZ0lhXtb7CfSsDwVKUl7egczsaL4-CQ3a_u9ptpDoXwXvQCTLChRbGkxaV4Lmhm7jbwaHo00xHpUP2XlPnaj7wNtqWDxZwJOUk5GVy4qGlnqpMhyJ-0YONcBxSOIcxSSZGR95h_ceiMHF4f2XDmosv-iIBvl8NuX_VC_atlsJ1_6DRPCFDR-X-p3oKWaLgwtH1JGv5F-bo9SeM6EeV9AE5PEweabiN9UtI72zuQKtiCa-1p690yWqK7F-CmZTNij4EZV7knleHoDdQ3SZhNPFnuybkq-0v8JJM2bPlkfzmxhSLIOzY87BcynHIVBPcXFt5FvBvFvzSKd1nhYMynfzuOsrq90Q3f-6k9WKvHAYhpJKNAkhGNWs11jgHAUrPS85Yub3kLEHMICunOKtVgwTSsjmkpMfd6QskIpdc17WWzCXg7XiKeCzNFyDpP6KNzQ0mHqw59ou0XMVByLZwDAeZIe00ix3kqVyI3o9ZIz0hZT5gs3OHzHDLOlYzq0TUB9qI3iucotmLgrX_nHP_FoR1wSmhe0xDnVQxWMRJksiu82cwyIqXtcMREMkn5Wyl4R5njfbickT-cpZ5Ru4v9twF2KAKknjDArNg7vyFbZEK9_TUsaLJzzF6N8-XOvWoibavCbeFXxd7fMaxTkMVYukNk1nXJOJQs_qPBL7ipJ3aMRBLofOF25Nf2KtSTaKC5COjOY0DrKaZ-FgNgN45S1NA45Ii4y-7BS40f7nrwruBM7SkFEZ5U_YtWMevKqKXvB12oj8WLRHmMtPYseLGBNSAS-QSZMYqZK3x36vGeTbVRdxlQ8UsjN.H8gItdZ6gh4z4g82KIDMbQ
Authorization: Bearer eyJjdHkiOiJKV1QiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiZGlyIn0..LppdczJz8iUazAT1MXF7wg.vu6sPxXGhvWUjujS8u67zfYSF9zWWXibsk8iyiDag3kXT63Q_fMVusPyIJWabbS-Aa3OS_jcWMI8veKu2kIKC_fTGn2VjfU4Rs4Gt4L95PnJnmeH11AxJi2z9Lq_dw35hVWQBWJZjhucihvb7A5p0z7vroa-5boeXHUJPg1qcfL_9S8ab91hIy2aBry4h_QSqOXp1hD22pE7KcrRFnbc3JoDhnoL9iBZQXXiUXyw9Cvce8krIkeD7_aZCIF7NVz66xZ9WKly3-OQDvR94EG4rTwAPAo8z2Zc6ioQSSdQWvXhij5V97Pjk4UPjHBP1kJxhC2y-aPfMBjnWZ0lhXtb7CfSsDwVKUl7egczsaL4-CQ3a_u9ptpDoXwXvQCTLChRbGkxaV4Lmhm7jbwaHo00xHpUP2XlPnaj7wNtqWDxZwJOUk5GVy4qGlnqpMhyJ-0YONcBxSOIcxSSZGR95h_ceiMHF4f2XDmosv-iIBvl8NuX_VC_atlsJ1_6DRPCFDR-X-p3oKWaLgwtH1JGv5F-bo9SeM6EeV9AE5PEweabiN9UtI72zuQKtiCa-1p690yWqK7F-CmZTNij4EZV7knleHoDdQ3SZhNPFnuybkq-0v8JJM2bPlkfzmxhSLIOzY87BcynHIVBPcXFt5FvBvFvzSKd1nhYMynfzuOsrq90Q3f-6k9WKvHAYhpJKNAkhGNWs11jgHAUrPS85Yub3kLEHMICunOKtVgwTSsjmkpMfd6QskIpdc17WWzCXg7XiKeCzNFyDpP6KNzQ0mHqw59ou0XMVByLZwDAeZIe00ix3kqVyI3o9ZIz0hZT5gs3OHzHDLOlYzq0TUB9qI3iucotmLgrX_nHP_FoR1wSmhe0xDnVQxWMRJksiu82cwyIqXtcMREMkn5Wyl4R5njfbickT-cpZ5Ru4v9twF2KAKknjDArNg7vyFbZEK9_TUsaLJzzF6N8-XOvWoibavCbeFXxd7fMaxTkMVYukNk1nXJOJQs_qPBL7ipJ3aMRBLofOF25Nf2KtSTaKC5COjOY0DrKaZ-FgNgN45S1NA45Ii4y-7BS40f7nrwruBM7SkFEZ5U_YtWMevKqKXvB12oj8WLRHmMtPYseLGBNSAS-QSZMYqZK3x36vGeTbVRdxlQ8UsjN.H8gItdZ6gh4z4g82KIDMbQ
Content-Type: application/json
SESSION: 64b9f9c9-e994-474f-8106-bdbe22845dfd
Response{protocol=http/1.1, code=401, message=Unauthorized, url=http://localhost:8080/managers/CDQRuntime/smartdq/training/}