Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #39535 > unrolled thread

How do I get JSON data instead of viewstate?

Started by"C.D. Altenburg, Ph.D," <cdalten@gmail.com>
First post2020-07-06 07:27 -0700
Last post2020-07-06 17:44 -0700
Articles 4 — 2 participants

Back to article view | Back to comp.lang.java.programmer


Contents

  How do I get JSON data instead of viewstate? "C.D. Altenburg, Ph.D," <cdalten@gmail.com> - 2020-07-06 07:27 -0700
    Re: How do I get JSON data instead of viewstate? Joerg Meier <joergmmeier@arcor.de> - 2020-07-06 23:39 +0200
      Re: How do I get JSON data instead of viewstate? "C.D. Altenburg, Ph.D," <cdalten@gmail.com> - 2020-07-06 17:20 -0700
        Re: How do I get JSON data instead of viewstate? "C.D. Altenburg, Ph.D," <cdalten@gmail.com> - 2020-07-06 17:44 -0700

#39535 — How do I get JSON data instead of viewstate?

From"C.D. Altenburg, Ph.D," <cdalten@gmail.com>
Date2020-07-06 07:27 -0700
SubjectHow do I get JSON data instead of viewstate?
Message-ID<bdaa75bc-250a-4660-b49b-c96bbf111fe0o@googlegroups.com>
Right now I'm opening a URL connection with the following methods

private String downloadLoginPage(URL url) throws IOException {
        Log.d(PRODUCTION_TAG, "===> " + url);
        //readJSON(url);
        //InputStream inputStream = null;
        BufferedReader bufferedReader = null;
        //HttpsURLConnection connection = null;
        HttpURLConnection connection = null;
        String result = null;
        String cookies = "";
        int code = 0; //added on 12 - 8 - 2018
        try {

           

            //The input form passed from the client to the server is in gzip format.
            //Any other other type will result in an I/0 error
            connection = (HttpURLConnection) url.openConnection();

            connection.setRequestMethod("POST");
            connection.setRequestProperty("Content-Type", "application/json; utf-8");

            connection.setRequestProperty("Accept", "application/json");
            connection.addRequestProperty("Accept-Encoding", "gzip, deflate, br");
            connection.addRequestProperty("X-Requested-With", "XMLHttpRequest");
            connection.addRequestProperty("Content-Type", "application/json");
            connection.setRequestProperty("Cache-Control", "no-cache, no-store, must-revalidate");
            connection.setDoInput(true);
            connection.setDoOutput(true);

            //cookies = connection.getHeaderField("Set-Cookie");
            //connection.setRequestProperty("Cookie", cookies);
            //connection.setChunkedStreamingMode(0); //added on 9 - 12 - 2018
            //Fconnection.connect();

            Log.e(PRODUCTION_TAG, "----------------------------------------");
            Log.e(PRODUCTION_TAG, "THE RESPONSE MESSAGE IS: " + connection.getResponseMessage());
            Log.e(PRODUCTION_TAG, "THE RESPONSE REQUEST IS: " + connection.getRequestMethod());
            Log.e(PRODUCTION_TAG, "THE RESPONSE CONTENT ENCONDING IS: " + connection.getContentEncoding());
            Log.e(PRODUCTION_TAG, "THE RESPONSE HEADERS ARE: " + connection.getHeaderFields());
            Log.e(PRODUCTION_TAG, "-----------------------------------");
            //Log.e(PRODUCTION_TAG, "THE RESPONSE CONTENT: " + connection.getContent().toString());
            //int responsecode = connection.getResponseCode();
            int responsecode = ((HttpURLConnection) connection).getResponseCode();
            Log.e(PRODUCTION_TAG, "THE RESPONSE CODE IS: " + responsecode);
            //int responsecode = 200;
            if (responsecode != HttpsURLConnection.HTTP_OK) {
                Log.e(PRODUCTION_TAG, "POSSIBLE 404? in downloadLogin()");

                //connection.disconnect();
                //redirect = true;
                //return null;
                throw new IOException("Http error code" + responsecode); //disabled in an attempt to debug
            }
            if ( responsecode == HttpsURLConnection.HTTP_MOVED_TEMP  || responsecode == HttpsURLConnection.HTTP_MOVED_PERM) {

                Log.e(PRODUCTION_TAG, "REDIRECT DETECTED");
                //throw new IOException(" Http error code" + responsecode);
                //return null;
                throw new IOException("Redirect response code" + responsecode); //added on 10 - 2 - 2018
            }

            bufferedReader = new BufferedReader((new InputStreamReader(connection.getInputStream())));
            InputStream inputStream = connection.getInputStream();
            //decodeStream(inputStream);

            if (bufferedReader != null) {
                //result = readStream(bufferedReader, amGzip, 64000); //Lame way to emulate ping.
                result = readStream(inputStream, amGzip, 64000); //Lame way to emulate ping.
            }
        }

        finally {
            if (bufferedReader != null) {
                bufferedReader.close();
            }
            if (connection != null) {
                //connection.disconnect(); //why no else if??
            }
        }
        //OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
        //out.write(result);
        //out.close();
        return result;
    }



 private String readStream(InputStream inputStreamReader, boolean amGzip, int offset) throws IOException{

        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

        String result = ""; //change from empty to null??! 10 - 4 - 2018
        int maxLength = offset; //don't ask
       
        byte [] buffer = new byte[maxLength];
        int numChars = 0;
        int readSize = 0;
        int length = 0;
        //START REVISED CODE
        //Possibly reading too large data stream. Hence why the insufficient resource error?

        /*String result = "";
        byte buffer[] = new byte[2048];
        int numberOfChars = 0;
        try {
            new BufferedReader(new InputStreamReader(new GZIPInputStream(stream)));
            while ((numberOfChars = stream.read()) > 0) {
                String app = new String(buffer, 0, numberOfChars);
                result = result + app;
            }


        */

        try {
            //new BufferedReader(new InputStreamReader(new GZIPInputStream(inputStreamReader)));
            InputStream inputStream = new GZIPInputStream(inputStreamReader);

            while((length = inputStream.read(buffer)) > 0) {
                byteArrayOutputStream.write(buffer, 0, length);
            }
            
            Log.e(PRODUCTION_TAG, "THE DECODED STREAM IS: " + byteArrayOutputStream);
        } catch (Exception e) {
            Log.e(PRODUCTION_TAG, "CAN'T DECODE STREAM BECAUSE: " + e.getMessage());
            e.printStackTrace();
        }

        if (numChars != -1 ) {
            //Log.e(PRODUCTION_TAG, "INITIAL HTTP CONNECTION? " + numChars);
            numChars = Math.min(numChars, maxLength);
            result = new String(buffer, 0, numChars);
        }


        return result;
    }



But instead of getting JSON, I get the viewstate...

 <!DOCTYPE html>
                <html>
                <head><meta charset="utf-8" /><meta http-equiv="X-UA-Compatible" content="IE=10; IE=9; IE=8; IE=EDGE" /><meta name="viewport" content="width=device-width, initial-scale=1" /><title>
                	Dayforce
                </title><link rel="shortcut icon" href="Content/Common/images/favicon.ico" /><link rel="apple-touch-icon" sizes="180x180" href="Content/Common/images/apple-touch-icon.png" /><link rel="mask-icon" href="Content/Common/images/safari-pinned-tab.svg" color="#3067db" /><link rel="manifest" href="Content/Common/images/manifest.webmanifest" /><meta name="theme-color" content="#ffffff" /><meta name="msapplication-square70x70logo" content="Content/Common/images/mstile-70x70.png" /><meta name="msapplication-square150x150logo" content="Content/Common/images/mstile-150x150.png" /><meta name="msapplication-wide310x150logo" content="Content/Common/images/mstile-310x150.png" /><meta name="msapplication-square310x310logo" content="Content/Common/images/mstile-310x310.png" /><meta name="msapplication-TileColor" content="#ffffff" /><link id="styles" rel="stylesheet" href="/MyDayforce/Content/Common/styles/rebrandedCss?v=D7kcseGKVfP49nJNTdXABaiA3me99jgF-8a7GIDzPiw1" />
                <script type="text/javascript" src="https://static.dayforcehcm.com/libraries/jquery/3.4.1/jquery.min.js"></script><script type="text/javascript" src="/MyDayforce/Scripts/Libs/bootstrap-modal.js"></script></head>
                <body>
                    <form method="post" action="./MyDayforce.aspx" id="duo_form">
                <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="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
                THE RESULT URL IS: https://usr57.dayforcehcm.com/MyDayforce/u/I3Q0QXXxm0q45z0RvYNdJA/HR/Employee/GetEmployeeBalanceDisplay



So the question is, how do I get the JSON data instead of the viewstate?

[toc] | [next] | [standalone]


#39536

FromJoerg Meier <joergmmeier@arcor.de>
Date2020-07-06 23:39 +0200
Message-ID<di4ny43mubtn$.59e3rk277485.dlg@40tude.net>
In reply to#39535
On Mon, 6 Jul 2020 07:27:02 -0700 (PDT), C.D. Altenburg, Ph.D, wrote:

> Right now I'm opening a URL connection with the following methods

> [...]

Okay, there is no nice way to say this: that code is terrible and would
literally serve as an example of common beginner mistakes. I don't want to
be mean about it, but the sooner your throw it away and just use a proper
library or modern code the better.

Personally, I would go with Retrofit 2 which uses OkHttp and Jackson under
the hood (by default), but there are many great solutions for this common
use case these days, and none of them involve writing low level code like
this.

> So the question is, how do I get the JSON data instead of the viewstate?

Sadly, I can't even help you with your actual problem: because that's on
the server side. We have no idea how to get a random website to serve JSON
if it isn't. :(

Liebe Gruesse,
		Joerg

-- 
Ich lese meine Emails nicht, replies to Email bleiben also leider
ungelesen.

[toc] | [prev] | [next] | [standalone]


#39537

From"C.D. Altenburg, Ph.D," <cdalten@gmail.com>
Date2020-07-06 17:20 -0700
Message-ID<21792bb3-a398-4998-8100-864acd6dca03o@googlegroups.com>
In reply to#39536
Fair enough

[toc] | [prev] | [next] | [standalone]


#39538

From"C.D. Altenburg, Ph.D," <cdalten@gmail.com>
Date2020-07-06 17:44 -0700
Message-ID<d619ec47-3f8b-437e-92a3-7f4682f3c33eo@googlegroups.com>
In reply to#39537
Someone had suggested Retrofit before. I need to figure out how to install it on Android. This could be a while since I just recently learned how to use things like git and React from the command line. My excuse is that I'm a Windows point and click type of person.

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.java.programmer


csiph-web