Подтвердить что ты не робот

Заявка на Android WebView с пользовательскими заголовками

Я мог видеть, что в документах Android есть два отдельных метода, чтобы опубликовать данные и добавить заголовки.

For setting Headers
public void loadUrl (String url, Map<String, String> additionalHttpHeaders)


For setting Post Data
public void postUrl (String url, byte[] postData)

Но мне действительно нужно отправить данные вместе с заголовками. (Значит, мне нужен единственный метод, который выполняет обе задачи?)

Может кто-нибудь, пожалуйста, помогите мне с этим.

Спасибо:)

4b9b3361

Ответ 1

Я столкнулся с той же проблемой в последнее время и через пару часов решил ее.

Вот мой фрагмент кода с некоторыми комментариями:

HttpClient httpclient = new DefaultHttpClient();

HttpPost httpPost = new HttpPost(getPostUrl());

// example of adding extra header "Referer"
httpPost.addHeader("Referer", getReferer()); 

ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();

for (PostItem postItem : getPostItems()) { 
    // key value post pairs
    // add post parameters in array list
    postParameters.add(new BasicNameValuePair(postItem.getKey(), postItem.getValue())); 
}

HttpResponse response = null;

try {
    mWebView.getSettings().setJavaScriptEnabled(true);
    httpPost.setEntity(new UrlEncodedFormEntity(postParameters));

    response = httpclient.execute(httpPost);

    BasicResponseHandler responseHandler = new BasicResponseHandler();
    String htmlString = responseHandler.handleResponse(response);

    // important!! is to fill base url
    mWebView.loadDataWithBaseURL(getPostUrl(), htmlString, "text/html", "utf-8", null); 

} catch (Exception e){
    // handle errors
}

Ответ 3

Вы можете сделать это в два этапа: попросить webview загрузить веб-страницу как пост, обработать этот запрос и обработать его заголовками:

val postData = "password=" + URLEncoder.encode(password, "UTF-8")+"&username=" + URLEncoder.encode(username, "UTF-8")
webView.postUrl(url, postData.toByteArray())

webView.webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
  val customHeaders = HashMap<String, String>()
   customHeaders["header"] = "header"
   webView.loadUrl(url, customHeaders)
   return true
 }
}