QML xmlhttprequest и curl получают разные результаты - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь получить ответ soap в QML с помощью xmlhttprequest. (я знаю, что qml xhr отличается). когда я запускаю его с помощью curl, я получаю именно то, что хочу.

curl -u user:pass https://outlook.office365.com/ews/exchange.asmx -d "@ews.xml" -H "Content-Type:text/xml" | xmllint --format -

Это базовый c auth и ews. xml - это то же самое, что и переменная ниже в QML

function getEWS() {
    var user = ""
    var password = ""
    var xml = '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"><soap:Body><m:FindItem Traversal="Shallow"><m:ItemShape><t:BaseShape>IdOnly</t:BaseShape><t:AdditionalProperties><t:FieldURI FieldURI="folder:DisplayName" /><t:FieldURI FieldURI="item:Subject" /><t:FieldURI FieldURI="item:Importance" /><t:FieldURI FieldURI="item:HasAttachments" /><t:FieldURI FieldURI="item:DateTimeSent" /><t:FieldURI FieldURI="calendar:Location" /><t:FieldURI FieldURI="calendar:Organizer" /><t:FieldURI FieldURI="calendar:Start" /><t:FieldURI FieldURI="calendar:End" /></t:AdditionalProperties></m:ItemShape><m:CalendarView MaxEntriesReturned="5" StartDate="2020-02-01T00:00:00.000-05:00" EndDate="2020-03-01T00:00:00.000-05:00" /><m:ParentFolderIds><t:FolderId Id="AQAW" ChangeKey="AgAA" /></m:ParentFolderIds></m:FindItem></soap:Body></soap:Envelope>';
    var url = "https://outlook.office365.com/ews/exchange.asmx";
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("GET", url, true, user, password);
    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
            //console.log(xmlhttp.responseText.toString())
        }
        if (xmlhttp.readyState === xmlhttp.DONE) {
          console.log(xmlhttp.response, xmlhttp.responseXML, xmlhttp.status);
        }
    }
    //xmlhttp.setRequestHeader("Authorization", "Basic " + Qt.btoa(user + ":" + password));
    xmlhttp.setRequestHeader("Content-type", "text/xml");
    xmlhttp.send(xml);
}

Ответ, который я получаю от xhr:

#content{ FONT-SIZE: 0.7em; PADDING-BOTTOM: 2em;
MARGIN-LEFT: 30px}BODY{MARGIN-TOP: 0px; MARGIN-LEFT: 0px; COLOR:
#000000; FONT-FAMILY: Verdana; BACKGROUND-COLOR: white}P{MARGIN-TOP:
0px; MARGIN-BOTTOM: 12px; COLOR: #000000; FONT-FAMILY:
Verdana}PRE{BORDER-RIGHT: #f0f0e0 1px solid; PADDING-RIGHT: 5px;
BORDER-TOP: #f0f0e0 1px solid; MARGIN-TOP: -5px; PADDING-LEFT: 5px;
FONT-SIZE: 1.2em; PADDING-BOTTOM: 5px; BORDER-LEFT: #f0f0e0 1px solid;
PADDING-TOP: 5px; BORDER-BOTTOM: #f0f0e0 1px solid; FONT-FAMILY:
Courier New; BACKGROUND-COLOR: #e5e5cc}.heading1{MARGIN-TOP: 0px;
PADDING-LEFT: 15px; FONT-WEIGHT: normal; FONT-SIZE: 26px; MARGIN-
BOTTOM: 0px; PADDING-BOTTOM: 3px; MARGIN-LEFT: -30px; WIDTH: 100%;
COLOR: #ffffff; PADDING-TOP: 10px; FONT-FAMILY: Tahoma; BACKGROUND-
COLOR: #003366}.intro{display: block; font-size:
1em;}ServiceService
You have created a service.To test this service, you will need to create a client and use it to call the service. You can do this using the svcutil.exe tool from the command line with the following syntax:
svcutil.exe https://sn6pr06mb6447.namprd06.prod.outlook.com:444/EWS/Services.wsdl
Это создаст файл конфигурации и файл кода, который содержит класс клиента. Добавьте эти два файла в ваше клиентское приложение и используйте сгенерированный клиентский класс для вызова Сервиса. Например: C#
class Test {
    static void Main()
    {
        HelloClient client = new HelloClient();

        // Use the 'client' variable to call
operations on the service.

        // Always close the client.
        client.Close();
    }
}
Визуальные основы c
Class Test
    Shared Sub Main()
        Dim client As HelloClient = New HelloClient()
        ' Use the 'client' variable to call
operations on the service.

        ' Always close the client.
        client.Close()
    End Sub
End Class

Я также попытался изменить агента пользователя и другие заголовки, но они не имеют значения. Удаление аутентификации дает мне 401, так что я знаю, что аутентификация basi c работает. Как я могу получить те же результаты

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...