2010-01-25 3 views
1

Je vais développer une extension firefox qui rendra XMLHttpRequest à this WebService.XMLHttpRequest sur SSL à partir de l'extension Firefox

Je peux interroger correctement le service avec le code suivant (des overlay.js):

var req = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:dat=\"http://webservice.whereisnow.com/datatypes\"><soapenv:Header/><soapenv:Body><dat:CurrentDocument><dat:applicationId>1</dat:applicationId><dat:publisherId>84</dat:publisherId><dat:documentId>8</dat:documentId><dat:versionId>1</dat:versionId></dat:CurrentDocument></soapenv:Body></soapenv:Envelope>"; 
var xmlhttpreq = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Components.interfaces.nsIXMLHttpRequest); 

xmlhttpreq.open("POST","https://www.whereisnow.com/webservice",false); // false = async 
xmlhttpreq.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE;  
xmlhttpreq.send(req); 
if (xmlhttpreq.readyState == 4){ 
    if(xmlhttpreq.status == 200) 
     alert(xmlhttpreq.responseText); 
    else 
     alert("Error: xmlhttpreq.status = " + xmlhttpreq.status) 
    } 
else 
    alert("Not ready: xmlHttpreq.readyState = " + xmlHttpreq.readyState); 

Le responseText sera un xml valide que je peux manipuler, mais le WebService peut être consulté à la fois via http et https (SSL), et je DOIS le faire sur https parce que l'authentification est nécessaire pour faire certaines choses.

Afin d'accéder via https je DOIS modifier le point final en utilisant https: // au lieu de http: // et le xml demande ainsi:

var req = "<soapenv:Envelope xmlns:dat=\"http://webservice.whereisnow.com/datatypes\" xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"><soapenv:Header><wsse:Security xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\"><wsse:UsernameToken wsu:Id=\"UsernameToken-1\" xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\"><wsse:Username>MY_USERNAME</wsse:Username><wsse:Password Type=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText\">SHA1_OF_MY_PASSWORD</wsse:Password></wsse:UsernameToken></wsse:Security></soapenv:Header><soapenv:Body><dat:CurrentDocument><dat:applicationId>1</dat:applicationId><dat:publisherId>84</dat:publisherId><dat:documentId>10</dat:documentId><dat:versionId>1</dat:versionId></dat:CurrentDocument></soapenv:Body></soapenv:Envelope>"; 

Le problème est que l'état du serveur est toujours 500 et le responseText est toujours ceci:

<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><soapenv:Fault><faultcode>soapenv:Server</faultcode><faultstring>InvalidSecurity</faultstring><detail></detail></soapenv:Fault></soapenv:Body></soapenv:Envelope> 

Une aide?


EDIT

Avec le code trouvé à this url j'ai découvert que le certificat SSL du service fonctionne correctement. Je pense donc que le problème est pas https ...

Répondre

0

résolu en ajoutant les lignes suivantes après l'ouverture (...):

xmlhttpreq.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); 
xmlhttpreq.setRequestHeader("SOAPAction", "whereIsNow");