簡體   English   中英

如何在使用HttpURLConnection(android / java)發布之前獲取VIEWSTATE?

[英]How to get VIEWSTATE before posting using HttpURLConnection (android/java)?

我正在編寫一個Android應用程序,並且一直在尋找一種從要發布到的服務器上獲取_VIEWSTATE的方法,以便可以將其放在Http發布內容中。 少數人推薦了正則表達式,但隨后其他一些專業人士強烈反對使用正則表達式解析HTML。 那么,如何解析_VIEWSTATE? 我在AsyncTask中使用HttpURLConnection / HttpsURLConnection。 另外,我不需要先放置InputStream閱讀器,然后先獲取_VIEWSTATE嗎? 所有的android示例都將輸入流放在輸出流之后。 這是到目前為止我的代碼的樣子(發布到一個站點,該站點具有必須“單擊”的三個頁面):

在我的活動中,我這樣調用Async任務:

//execute AsyncTask for all three reports
    submit_report.execute(report1, report2, report3); 

我的異步任務doInBackground方法:

class UploadReportTask extends AsyncTask<HashMap<String,String>, ProgressBar, Void> {

//this is called on task.execute
    protected Void doInBackground(HashMap<String,String>...maps) {
        System.out.println("Report is being uploaded"); 

        URL url = null;
        try {
            url = new URL(getString(R.string.url_dnc));
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        HttpURLConnection urlConnection = null;
        try {
            urlConnection = (HttpURLConnection) url.openConnection();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            urlConnection.setDoOutput(true);
            urlConnection.setRequestProperty("Accept-Charset", utf);
            urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + utf);
            urlConnection.setChunkedStreamingMode(0);


            //For each map in maps, encode the map,
            //get the headers, add the headers to the map, convert to bytes,
            //then post the bytes, 
            //get response.
            for (HashMap<String,String> map : maps){
                byte[] payload = makePayload(map);
                OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream());
                //urlConn.connect //I think this happens here
                out.write(payload);

                InputStream in = new BufferedInputStream(urlConnection.getInputStream());

                BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                int length = in.read();
                String result, line = reader.readLine();
                result = line;
                while (length != -1){
                    result+=line;
                }
                System.out.println(result);
                out.flush();
                out.close();
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
        finally{
            urlConnection.disconnect();
        }
        return null;    
    }
protected String parseViewstate(String response){
        int i = 0;
        String viewstate = "";
        while (true){
            int found = response.indexOf("\"__VIEWSTATE\"", i);
            if (found == -1) break;
            int start = found + 38; //check numbers from start of "__V"
            int end  = (response.indexOf("/>", start)) -2;
            viewstate = response.substring(start, end);
            i = end + 1;    
        }return viewstate;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM