HTTPS POST / GET с Qml / Qt - PullRequest
       37

HTTPS POST / GET с Qml / Qt

6 голосов
/ 09 января 2012

В последнее время я работаю на мобильных телефонах Nokia с использованием Qt-Qml. Я должен сделать запрос POST к данному URL-адресу HTTPS. Я использую QML и пытаюсь сделать это в Javascript без какой-либо удачи.

У кого-нибудь есть идеи по этому поводу? Это можно сделать с помощью Javascript в QML? Любой совет, как сделать это в QT?

Я пытался вызвать такую ​​функцию:

var http = new XMLHttpRequest()
var url = "myform.xsl_submit";
var params = "num=22&num2=333";
http.open("POST", url, true);

//Send the proper header information along with the request
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http.setRequestHeader("Content-length", params.length);
http.setRequestHeader("Connection", "close");

http.onreadystatechange = function() {//Call a function when the state changes.
    if(http.readyState == 4 && http.status == 200) {
        print("ok");
    }else{
                print("cannot connect");
        }
}
http.send(params);

1 Ответ

7 голосов
/ 10 января 2012

Ваше if утверждение неверно: функция вызывается несколько раз, но только один раз http.readyState = 4. Итак, вы печатаете сообщения об ошибках, хотя ошибок пока нет.

Вы должны сначала проверить, если http.readyState = 4, а затем посмотреть на код состояния.

Вот минимальный рабочий пример:

import QtQuick 1.1

Rectangle {
    Component.onCompleted: {
        var http = new XMLHttpRequest()
        var url = "http://localhost:8080";
        var params = "num=22&num2=333";
        http.open("POST", url, true);

        // Send the proper header information along with the request
        http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        http.setRequestHeader("Content-length", params.length);
        http.setRequestHeader("Connection", "close");

        http.onreadystatechange = function() { // Call a function when the state changes.
                    if (http.readyState == 4) {
                        if (http.status == 200) {
                            console.log("ok")
                        } else {
                            console.log("error: " + http.status)
                        }
                    }
                }
        http.send(params);
    }
}

Я создал локальный псевдо-веб-сервер с netcat для его проверки:

% echo -e 'HTTP/1.1 200 OK\n\n' | nc -l 8080 
POST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
Content-Length: 15
Connection: Keep-Alive
Accept-Encoding: gzip
Accept-Language: de-DE,en,*
User-Agent: Mozilla/5.0
Host: localhost:8080

num=22&num2=333
...