webView之post请求携带请求头及打印日志等剖析

                                                                                        webView之post请求携带请求头及打印日志等剖析

关于viewView大家经常使用的往往是get请求,加载页面信息(这里不做详解),本片博客主要post请求添加请求头及相关问题扩展。

附demo如下 


package net.meyki.app.activity.order;


import android.annotation.SuppressLint;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.ConsoleMessage;
import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebResourceResponse;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;


import com.google.android.gms.appindexing.Action;
import com.google.android.gms.appindexing.AppIndex;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.uzmap.pkg.uzkit.request.HttpPost;


import net.meyki.app.R;
import net.meyki.app.utils.Log;


import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.entity.StringEntity;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EncodingUtils;
import org.apache.http.util.EntityUtils;


import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Observable;
import java.util.Set;


public class WebViewDemo extends AppCompatActivity {
    public Map<String, String> headerMap;
    public String urls;
    public TextView button;
    public WebView web;
    public String ss;
    public String postData;
    /**
     * ATTENTION: This was auto-generated to implement the App Indexing API.
     * See https://g.co/AppIndexing/AndroidStudio for more information.
     */
    private GoogleApiClient client;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_view_demo);
        button = (TextView) findViewById(R.id.click);
        web = (WebView) findViewById(R.id.webview);
        webViewTest();
        client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
    }


    private void webViewTest() {
        String url = "http://****/api/validate/mobile?token=******";
        //json 数据(入参)
        postData = "{\n" +
                "    \"bid\": \"******\",\n" +
                "    \"sn\": \"\",\n" +
                "\t\"depNo\": \"\",\n" +
                "\t\"token\": \"********\",\n" +
                "    \"metas\": [\n" +
                "        {\n" +
                "            \"name\": \"编号\",\n" +
                "            \"value\": \"12321\",\n" +
                "            \"seq\": \"1\"\n" +
                "        },\n" +
                "        {\n" +
                "            \"name\": \"名称\",\n" +
                "            \"value\": \"测试\",\n" +
                "            \"seq\": \"2\"\n" +
                "        }\n" +
                "    ],\n" +
                "    \"files\": [\n" +
                "        {\n" +
                "            \"name\": \"1.png\",\n" +
                "            \"hash\": \"1e53f08a55fef2e97808ccd7bb2bf4da7cc86a4ea94179ead1dc14b1e030855e\",\n" +
                "            \"seq\": \"1\"\n" +
                "        },\n" +
                "        {\n" +
                "            \"name\": \"测试5.pdf\",\n" +
                "            \"hash\": \"5ad73b9346f9dbaf40be8adf99c031e39f119923b578154192fa673443736b14\",\n" +
                "            \"seq\": \"2\"\n" +
                "        }\n" +
                "    ]\n" +
                "}";
        Log.i("====postData====", "====postData====" + postData);
        headerMap = new HashMap<>();
        headerMap.put("Content-Type", "application/x-www-form-urlencoded");


        StringEntity se = null;
        try {
            se = new StringEntity(postData);
        } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block


            e.printStackTrace();
        }
        byte[] result = null;
        try {
            result = EntityUtils.toByteArray(se);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        web.getSettings().setJavaScriptEnabled(true);
        web.addJavascriptInterface(new InJavaScriptLocalObj(), "local_obj");
        web.setWebViewClient(new WebViewClient() {
            @SuppressLint("NewApi")
            @Override//拦截器添加请求头
            public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
                if (request != null && request.getUrl() != null && request.getMethod().equalsIgnoreCase("post")) {
                    String scheme = request.getUrl().getScheme().trim();
                    if (scheme.equalsIgnoreCase("http") || scheme.equalsIgnoreCase("https")) {
                        try {
                            URL url = new URL(request.getUrl().toString());
                            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                            connection.setRequestMethod("POST");
                            connection.setRequestProperty("Content-type", "application/json");
                            Log.i("====postData====ll", "====postData====" + postData);
                            connection.getOutputStream().write(postData.getBytes());
                            return new WebResourceResponse("text/html", connection.getHeaderField("encoding"), connection.getInputStream());
                        } catch (MalformedURLException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
                return null;
            }


            @Override//打印web页面数据(html)
            public void onPageFinished(WebView view, String url) {
                Log.d("WebView", "onPageFinished ");
                view.loadUrl("javascript:window.local_obj.showSource('<head>'+" +
                        "document.getElementsByTagName('html')[0].innerHTML+'</head>');");
                super.onPageFinished(view, url);
            }




        });
        web.setWebChromeClient(new WebChromeClient() {
            @Override//开启打印js log功能
            public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
                String message = consoleMessage.message();
                int lineNumber = consoleMessage.lineNumber();
                String sourceID = consoleMessage.sourceId();
                String messageLevel = consoleMessage.message();
                ConsoleMessage.MessageLevel messageLevel1 = consoleMessage.messageLevel();
                Log.i("app3cs", String.format("[%s] sourceID: %s lineNumber: %n message: %s",
                        messageLevel, sourceID, lineNumber, message));
                return super.onConsoleMessage(consoleMessage);
            }


        });
        web.postUrl(url, EncodingUtils.getBytes(postData.toString(), "UTF-8"));
    }




    final class InJavaScriptLocalObj {


        @JavascriptInterface
        public void showSource(String html) {
            Log.d("HTML", html);
        }
    }


}





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值