Leaflet: É possível alterar as informações do cabeçalho para solicitação de bloco?

Criado em 11 out. 2013  ·  13Comentários  ·  Fonte: Leaflet/Leaflet

Preciso acessar servidores de blocos que exigem a passagem de um token. Existe alguma maneira de interceptar a solicitação de bloco para que eu possa adicionar algo ao cabeçalho antes que a solicitação seja feita. Ou seja, seria bom se eu pudesse ouvir uma solicitação de pré-bloco, por meio de um evento, mexer nos cabeçalhos e enviar a solicitação.

Comentários muito úteis

@SunnyMittal Eu usei superagent para ajax, substitua conforme necessário.

L.TileLayer.WMS_Headers = L.TileLayer.WMS.extend({
  createTile(coords, done) {
    const url = this.getTileUrl(coords);
    const img = document.createElement('img');
    superagent
      .get(url)
      .set(‘header’, ‘header value’)
      .responseType('blob')
      .then((response) => {
        img.src = URL.createObjectURL(response.body);
        done(null, img);
      });
    return img;
  }
});

L.tileLayer.wms_headers = (url, options) => new L.TileLayer.WMS_Headers(url, options);

Todos 13 comentários

Hmm ... Existe uma maneira de fazer isso em HTML? Quer dizer, como você carregaria uma imagem com cabeçalhos personalizados em geral, sem falar no Folheto?

Bom ponto! Indo mais fundo, vejo o que está acontecendo. E sim, você está correto, não acho que haja uma maneira de modificar os cabeçalhos, a menos que você esteja fazendo uma solicitação AJAX. A maioria das APIs permite que tokens de acesso também sejam passados ​​na url como um parâmetro de consulta. Eu vou olhar mais para isso.

Se possível passar como parâmetros no meu caso, acho que posso simplesmente estender o TileLayer para passar as informações de param que preciso. Posso criar uma extensão que essencialmente adiciona parâmetros de consulta ao TileLayer (TileLayerQueryParam ou algo assim). Você já se deparou com alguma situação em que o TileLayer precisaria passar parâmetros de consulta? A extensão do IE está bem, mas estou pensando se isso deveria fazer parte do TileLayer.

Sim, adicionar parâmetros de consulta é muito mais fácil. :)

adicionar como parâmetros de consulta está bem, mas expõe o token no URL da solicitação. ao implementar um OAuth 2.0, a sugestão é gravar o token no cabeçalho. Este problema deve ser uma nova solicitação pull.

Esse recurso seria ótimo para OAuth 2.0 adicionar o cabeçalho de autorização.

@zhenyanghua @ rrameshkumar76 como mencionado acima, TileLayer é apenas uma tag img e, até onde sabemos, não há como definir cabeçalhos personalizados para uma tag de imagem.

Dito isso, você pode carregar blocos da maneira que quiser (como usando AJAX) se estender GridLayer . Existem alguns exemplos muito bons de como fazer coisas assim no tutorial Extending Leaflet, New Layers .

Obrigado @perliedman pela resposta e explicação.
Consegui estender L.TileLayer.WMS e substituir o método createTile, onde fiz uma chamada ajax para obter a imagem do bloco com cabeçalhos.

Olá, Ramesh Kumar, é possível compartilhar a classe WMS estendida para referência?
Muito obrigado

@SunnyMittal Eu usei superagent para ajax, substitua conforme necessário.

L.TileLayer.WMS_Headers = L.TileLayer.WMS.extend({
  createTile(coords, done) {
    const url = this.getTileUrl(coords);
    const img = document.createElement('img');
    superagent
      .get(url)
      .set(‘header’, ‘header value’)
      .responseType('blob')
      .then((response) => {
        img.src = URL.createObjectURL(response.body);
        done(null, img);
      });
    return img;
  }
});

L.tileLayer.wms_headers = (url, options) => new L.TileLayer.WMS_Headers(url, options);

@ rrameshkumar76 obrigado, ajudou :)

baseado em @ rrameshkumar76 anwser, eu construí um plugin super simples.
Espero que você goste.

Se alguém quer adicionar cabeçalhos para L.TileLayer em vez de L.TileLayer.WMS , isso é possível por uma simples modificação @ Ticinum-aeroespacial 's plug-in . Apenas altere a classe base de L.TileLayer.WMS para L.TileLayer e renomeie a nova classe e função apropriadamente.

Modifiquei o plugin de @ ticinum-aerospace para L.TileLayer vez de L.TileLayer.WMS aqui: https://github.com/jaq316/leaflet-header/blob/master/index.js

Esta página foi útil?
0 / 5 - 0 avaliações