2016-03-30 6 views
0

В моем приложении для Android я подключаюсь к защищенному сайту, где мои учетные данные содержатся в пользовательских заголовках. Я могу войти в систему успешно, потому что пользовательские заголовки отправляются с новым запросом страницы. Основываясь на моей пользовательской информации заголовка, есть определенные функции страницы, которые включены для моего устройства. Проблема заключается в том, что при загрузке ресурсов с домашней страницы после входа в систему пользовательские заголовки, которые я указываю в webview.LoadUrl(); не отправляются. Поэтому конечный результат заключается в том, что я могу войти в систему, но не получать специальные функции, связанные с моим устройством.Пользовательские заголовки android webview не выходят на страничные запросы ресурсов

Я пробовал оба этих переопределения. shouldOverrideUrlLoading, похоже, работает при изменении URL-адреса, но shouldInterceptRequest, похоже, не вызывает вызовы ресурсов? Если это моя реализация не работает?

 @Override 
     public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { 
      request.getRequestHeaders().putAll(getExtraHeaders()); 
      return super.shouldInterceptRequest(view, request); 
     } 


     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url, getExtraHeaders()); 
       return false; 

      } 

ответ

0

Смотрите, если это работает немного лучше для вас:

@Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 

     view.post(new Runnable() { 
      @Override 
      public void run() { 
       view.loadUrl(url, getExtraHeaders()); 
      } 
     }); 

     // true means: yes, we are overriding the loading of this url 
     return true; 
    } 

Этот дополнительный код просто предложение/план и не следует воспринимать как вырезать/вставить готовый код

@Override 
    public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { 

     String mimetype; 
     String encoding; 

     Map<String, String> headers = new HashMap<>(); 
     headers.putAll(request.getRequestHeaders()); 
     headers.putAll(getExtraHeaders()); 

     URL url = request.getUrl().toString(); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     for (String key : headers.keySet()) { 
      conn.setRequestProperty(k, headers.get(k)); 
      // TODO look for the mimetype and encoding header information and set mimetype and encoding 
     } 

     return new WebResourceResponse(mimetype, encoding, conn.getInputStream()); 
     // return null here if you decide to let the webview load the resource 
    } 
+0

Привет, Большое спасибо за ответ. – FranticCity

+0

На самом деле моя реализация shouldOverrideUrlLoading() работает нормально. Он вызывается при каждом новом запросе страницы и добавляются заголовки. Проблема возникает после начальной загрузки, когда веб-просмотр начинает запрашивать ресурсы страницы. В каждом запросе ресурса отсутствуют дополнительные заголовки. Вот пример. Если я загружу тестовую страницу заголовка «http://www.procato.com/my+headers/» в своем веб-представлении, как только загружается страница, я вижу все правильные заголовки. Через 2 секунды, когда страница загружает изображения с правой стороны, дополнительные заголовки не находятся в запросе. – FranticCity

+0

Я обновил свой ответ, чтобы включить возможное предложение. Изображения проходят через 'shouldInterceptRequest()', поэтому вы можете обрабатывать запрос там сами с помощью 'URLConnection'. Я написал код, чтобы дать вам представление, но я его не тестировал. Надеюсь, это даст вам вдохновение для последней части головоломки. –

 Смежные вопросы

  • Нет связанных вопросов^_^