code: public final ServerResponse make_restful_get(String url, JSONObject params, String tag, String branchKey) {
          String modifiedUrl = url;
          params = params != null ? params : new JSONObject();
          if (addCommonParams(params, branchKey)) {
              modifiedUrl += this.convertJSONtoString(params);
          } else {
              return new ServerResponse(tag, BranchError.ERR_BRANCH_KEY_INVALID);
          }
  
          long reqStartTime = System.currentTimeMillis();
          PrefHelper.Debug("getting " + modifiedUrl);
  
          try {
              BranchResponse response = doRestfulGet(modifiedUrl);
              return processEntityForJSON(response.responseData, response.responseCode, tag);
          } catch (BranchRemoteException branchError) {
              if (branchError.branchErrorCode == BranchError.ERR_BRANCH_REQ_TIMED_OUT) {
                  return new ServerResponse(tag, BranchError.ERR_BRANCH_REQ_TIMED_OUT);
              } else { // All other errors are considered as connectivity error
                  return new ServerResponse(tag, BranchError.ERR_BRANCH_NO_CONNECTIVITY);
              }
          } finally {
              // Add total round trip time
              if (Branch.getInstance() != null) {
                  int brttVal = (int) (System.currentTimeMillis() - reqStartTime);
                  Branch.getInstance().addExtraInstrumentationData(tag + "-" + Defines.Jsonkey.Branch_Round_Trip_Time.getKey(), String.valueOf(brttVal));
              }
          }
      }
docs: Method for handling the RESTful POST operations to Branch Servers. Internally calls abstract method {@link #doRestfulGet(String)}
  
  @param url       The url end point
  @param params    {@link JSONObject with parameters to the GET call}
  @param tag       {@link String} Tag for identifying the request for analytical or debugging purpose
  @param branchKey {@link String} Branch key
  @return {@link ServerResponse} object representing the result of RESTful GET to Branch Server