Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在ImageMapType Javascript的getTileUrl中添加授权标头_Javascript_Jquery_Google Maps_Http Headers - Fatal编程技术网

如何在ImageMapType Javascript的getTileUrl中添加授权标头

如何在ImageMapType Javascript的getTileUrl中添加授权标头,javascript,jquery,google-maps,http-headers,Javascript,Jquery,Google Maps,Http Headers,在为Google Maps API创建TileOverlay时,我想访问托管在需要用户/通行证的不同主机上的一些自定义地图磁贴 这是我当前的Javascript代码: var carte = new google.maps.ImageMapType({ getTileUrl: function (tileCoord, zoom) { var url = "http://host.com/" + (zoom + 1) + "/" + (tileCoord.x + 1) +

在为Google Maps API创建TileOverlay时,我想访问托管在需要用户/通行证的不同主机上的一些自定义地图磁贴

这是我当前的Javascript代码:

var carte = new google.maps.ImageMapType({
    getTileUrl: function (tileCoord, zoom) {
        var url = "http://host.com/" + (zoom + 1) + "/" + (tileCoord.x + 1) + ":" + (tileCoord.y + 1) + "/tile.png";
        return url;
    }, 
    tileSize: new google.maps.Size(256, 256), 
    minZoom: 8, 
    opacity: 0.6
});
map.overlayMapTypes.push(carte);
由于连接返回401授权,我无法访问互动程序。我如何在Javascript/Jquery中传递授权头,让url知道我有权访问这些分幅


我正在搜索这样的解决方案,但在Javascript中:

当用户代理想要发送服务器身份验证凭据时,它可能会使用授权字段

授权字段的构造如下所示:

用户名和密码由一个冒号组合而成。 生成的字符串使用Base64的RFC2045-MIME变量进行编码,但不限于76个字符/行。 然后将授权方法和空格(即“Basic”)放在编码字符串之前

资料来源:


我通过弹劾代理找到了解决办法。 以下是实现的代码:

var carte = new google.maps.ImageMapType({
        getTileUrl: function (tileCoord, zoom) {
            return 'http://myhost/myController/getTile?url=http://externe_url/' + (zoom + 1) + "/" + (tileCoord.x + 1) + ":" + (tileCoord.y + 1) + "/tile.png";
        }, 
        tileSize: new google.maps.Size(256, 256),  
        minZoom: 8,  
        opacity: 0.6
    });
我的控制器代码:

def getTile() {
def result
try {
    def http = new HTTPBuilder()
    try {
        http.setHeaders([Authorization: 'Basic ' + 'user:pass'.bytes.encodeBase64().toString()])
        http.request(params.url, Method.GET, ContentType.BINARY) { req ->
            response.success = { resp, retour ->
                result = retour.bytes
            }
        }
    } catch (IOException | URISyntaxException e) { }
}

if(result) {
    // on renvoie au navigateur le contenu de l'image
    response.status = HttpServletResponse.SC_OK
    response.contentType = 'image/x-png'
    response.outputStream << result
    response.outputStream.flush()
}
else {
    response.status = HttpServletResponse.SC_NO_CONTENT
}
}
def getTile(){
def结果
试一试{
def http=new HTTPBuilder()
试一试{
http.setHeaders([Authorization:'Basic'+'user:pass'.bytes.encodeBase64().toString()]))
请求(params.url、Method.GET、ContentType.BINARY){req->
response.success={resp,retour->
结果=retour.bytes
}
}
}catch(IOException | URISyntaxException e){}
}
如果(结果){
//论形象的内涵
response.status=HttpServletResponse.SC\u正常
response.contentType='image/x-png'

response.outputStream您正在搜索这个吗?我正在搜索这样的解决方案:,但在Javascript中。@Ulyanca,您找到了这个解决方案吗?我正在处理完全相同的问题,我希望您能为我指出正确的方向…而这段代码可能会回答这个问题,并提供有关如何和/或为什么解决这个问题的附加上下文这个问题将提高答案的长期价值。他问如何在javascript/jquery中传递授权头,这就是它的传递方式。即使发布的代码确实回答了这个问题,一个好的答案将有助于解释代码解决问题的原因。在StackOverflow上,仅代码的答案被认为是低质量的。谢谢你的帖子,但这并不是我真正的问题。我搜索的解决方案如下:,而是Javascript。
def getTile() {
def result
try {
    def http = new HTTPBuilder()
    try {
        http.setHeaders([Authorization: 'Basic ' + 'user:pass'.bytes.encodeBase64().toString()])
        http.request(params.url, Method.GET, ContentType.BINARY) { req ->
            response.success = { resp, retour ->
                result = retour.bytes
            }
        }
    } catch (IOException | URISyntaxException e) { }
}

if(result) {
    // on renvoie au navigateur le contenu de l'image
    response.status = HttpServletResponse.SC_OK
    response.contentType = 'image/x-png'
    response.outputStream << result
    response.outputStream.flush()
}
else {
    response.status = HttpServletResponse.SC_NO_CONTENT
}
}