2017-10-10 6 views
0

J'essaie d'envoyer une requête POST http. Voici des extraits de code:Demande de réseau Qt Ajout automatique d'un point d'interrogation inattendu

const QUrl URL("https://httpbin.org/post"); 
    QNetworkRequest req(URL); 
    req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); 

    QUrlQuery urlQuery; 
    urlQuery.addQueryItem ("username", username); 
    urlQuery.addQueryItem ("password", password); 
    QUrl params; 
    params.setQuery (urlQuery); 


    mNetReply = mNetMan->post(req, params.toEncoded()); 

et voici la sortie de réponse:

QJsonObject({"args":{},"data":"","files":{},"form":{"?username":"xyz","password":"xyz"},"headers":{"Accept-Encoding":"gzip, deflate","Accept-Language":"en-US,*","Connection":"close","Content-Length":"28","Content-Type":"application/x-www-form-urlencoded","Host":"httpbin.org","User-Agent":"Mozilla/5.0"},"json":null,"origin":"*.*.*.*","url":"https://httpbin.org/post"}) 

Mon problème est, qt automatiquement en ajoutant une marque ? dans la première QueryItem.

+2

Mais les requêtes sont suivies d'un point d'interrogation, non? E.g. www.xyz.com?GetName,GetID. Et puisqu'il est ajouté au 1er article, je crois que c'est par conception Pouvez-vous écrire comment votre URI est censé s'occuper après avoir ajouté les éléments de la requête? – PRIME

+0

vous avez raison. Ce n'est pas le meilleur moyen d'envoyer des données de formulaire http. une idée de comment le faire? – pyprism

+1

Tout d'abord, pourquoi publiez-vous une requête? N'êtes-vous pas censé utiliser get au lieu de poster? – PRIME

Répondre

1

Pour ce que ça vaut encore, parce qu'une réponse n'a pas été donnée:

Ne pas utiliser la conversion à un qurl, en utilisant le QUrlQuery directement résolu le problème pour moi.

urlQuery.toString(QUrl::FullyEncoded).toUtf8() 

au lieu de

params.toEncoded() 

total Snipped mis à jour:

const QUrl URL("https://httpbin.org/post"); 
QNetworkRequest req(URL); 
req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); 

QUrlQuery urlQuery; 
urlQuery.addQueryItem ("username", username); 
urlQuery.addQueryItem ("password", password); 

mNetReply = mNetMan->post(req, urlQuery.toString(QUrl::FullyEncoded).toUtf8());