2017-04-12 105 views
0

我正在开发一个Chrome扩展,它将授权标头添加到请求中。Chrome onBeforeSendHeaders未捕获FTP请求

为此,我使用onBeforeSendHeaders,但遗憾的是它不工作FTP请求。我已经给许可清单中,并在后台

清单权限说:

"permissions": [ 
    "webRequest", 
    "webRequestBlocking", 
    "webNavigation", 
    "tabs", 
    "cookies", 
    "ftp://*/*", 
    "*://*/*" 
    ] 

,我用onBeforeSendHeaders这样的:

chrome.webRequest.onBeforeSendHeaders.addListener(
     function(details) { 
     if(details.url == "my_url"){  
       details.requestHeaders.push({'name':'Authorization','value':'my_value'}); 
        return { requestHeaders: details.requestHeaders }; 
     }   
     }, 
    {urls: ['<all_urls>','ftp://*/*']}, 
    [ 'blocking', 'requestHeaders'] 
    ); 
callback(true); 
} 

并且如果我无法打开FTP在Chrome中;有没有其他的方法,我可以使用单个命令(例如ssh [email protected] -pw pass)在终端或腻子中打开FTP?

+1

在FTP中有没有标题。所以'onBeforeSendHeaders'没有被触发是有道理的。出于同样的原因,尝试向“FTP请求”添加“授权标题”确实很有意义。 –

+0

ohh。非常感谢@Martin ...你可以建议我一个解决方案来打开FTP服务器..应该怎么做呢..有什么称为证书..因为当我们点击打开FTP服务器..它要求凭据 – user5821368

+0

请阅读[在什么情况下,我可以添加“紧急”或其他类似的短语,以获得更快的答案?](https://meta.stackoverflow.com/q/326569) - 总结是,这不是这是解决志愿者问题的理想方式,可能会对获得答案产生反作用。请不要将这添加到您的问题。 – halfer

回答

1

onAuthRequired是解决它,为我工作:

var target = "ftp://ftpurl/"; 

var myCredentials = { 
    username: "username", 
    password: "pass" 
}; 

var pendingRequests = []; 

// A request has completed. 
// We can stop worrying about it. 
function completed(requestDetails) { 
    console.log("completed: " + requestDetails.requestId); 
    var index = pendingRequests.indexOf(requestDetails.requestId); 
    if (index > -1) { 
    pendingRequests.splice(index, 1); 
    } 
} 

function provideCredentialsSync(requestDetails) { 

    // If we have seen this request before, then 
    // assume our credentials were bad, and give up. 
    if (pendingRequests.indexOf(requestDetails.requestId) != -1) { 
    console.log("bad credentials for: " + requestDetails.requestId); 
    return {cancel:true}; 
    } 
    pendingRequests.push(requestDetails.requestId); 
    console.log("providing credentials for: " + requestDetails.requestId); 
    return {authCredentials: myCredentials}; 
} 

chrome.webRequest.onAuthRequired.addListener(
    provideCredentialsSync, 
    {urls: [target]}, 
    ["blocking"] 
); 

chrome.webRequest.onCompleted.addListener(
    completed, 
    {urls: [target]} 
); 

chrome.webRequest.onErrorOccurred.addListener(
    completed, 
    {urls: [target]} 
);    

}