2017-04-12 1 views
0

Ich entwickle eine Chrome-Erweiterung, die Autorisierungsheader zu den Anfragen hinzufügen wird.Chrome onBeforeSendHeaders keine FTP-Anfrage abfangen

Dazu verwendete ich onBeforeSendHeaders, aber leider ist es nicht für FTP Anfragen arbeiten. Ich habe die Erlaubnis in einem offenkundigen gegeben und auch im Hintergrund

Manifest Berechtigungen sagt:

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

und ich onBeforeSendHeaders wie folgt aus:

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); 
} 

Und auch, wenn ich versage FTP öffnen in Chrome; Gibt es einen anderen Weg, wo ich FTP in Terminal oder Putty mit einem einzigen Befehl (etwa ssh [email protected] -pw pass) öffnen könnte?

+1

Es gibt keine Header in FTP. Es macht also Sinn, dass der 'onBeforeSendHeaders' nicht ausgelöst wird. Und aus dem gleichen Grund ist es sinnvoll, "Authorization headers" zu "FTP request" hinzuzufügen. –

+0

ohh. Vielen Dank @Martin ... können Sie mir eine Lösung zum Öffnen von FTP-Server vorschlagen .. wie sollte es dann tun .. gibt es etwas namens credentials .. weil, wenn wir klicken, um FTP-Server zu öffnen .. es fragt nach Anmeldeinformationen – user5821368

+0

Bitte lesen [Unter welchen Umständen kann ich meiner Frage "dringende" oder ähnliche Formulierungen hinzufügen, um schnellere Antworten zu erhalten?] (https://meta.stackoverflow.com/q/326569) - Die Zusammenfassung ist, dass dies nicht der Fall ist ein idealer Weg, um Freiwillige anzusprechen, und ist wahrscheinlich kontraproduktiv, um Antworten zu erhalten. Bitte unterlassen Sie das Hinzufügen zu Ihren Fragen. – halfer

Antwort

1

onAuthRequired ist die Lösung für sie und für mich gearbeitet:

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]} 
);    

} 
Verwandte Themen