2011-06-21 7 views
2

J'ai besoin d'aide pour envoyer une demande de publication en plusieurs parties. Le problème principal est que le serveur ne reconnaît pas la partie post-corps de ma demande. Le côté serveur fonctionne correctement avec Android, mais pas avec Qt et NetworkAccessManager.Qt multipart post problème

Voici le code:

Ici je fais partie du corps à envoyer à la demande (transferData est un QByteArray avec un texte):

postBody.append("\r\n--"+ boundary + "\r\n"); 
postBody.append("Content-Disposition: form-data; name=\"auth\" \r\n"); 
postBody.append(" \r\n"); 
postBody.append(auth + " \r\n"); 
postBody.append("--"+ boundary + "\r\n"); 
postBody.append("Content-Disposition: form-data; name=\"upload-test-data\" \r\n"); 
postBody.append(" \r\n"); 
postBody.append(transferData + " \r\n"); 
postBody.append("--"+ boundary + "\r\n"); 
postBody.append("Content-Disposition: form-data; name=\"upload-checksum\" \r\n"); 
postBody.append(" \r\n"); 
postBody.append(checksum.toHex() + " \r\n"); 
postBody.append("\r\n--" + boundary + "--\r\n"); 

Voici les en-têtes:

request.setRawHeader("User-Agent", "MyApp 1.0"); 
request.setRawHeader("Content-Type", "multipart/form-data; boundary="+boundary.toAscii()); 
request.setHeader(QNetworkRequest::ContentLengthHeader, QString::number(postBody.size()).toAscii()); 

Répondre

2

Essayez ajouter l'en-tête "Content-Length" après avoir défini "Content-Type". La valeur devrait être quelque chose comme QString::number(postBody.length()). (Édité: Cela n'a pas résolu le problème). Suppression de l'espace supplémentaire avant le traitement de la nouvelle ligne (\ r \ n). Veuillez changer postBody.append ("\ r \ n") à postBody.append ("\ r \ n")

+0

Merci pour votre réponse, mais le changement de taille à la longueur n'a pas fonctionné. Plus de suggestions? – Rokker

+2

Essayons également de supprimer l'espace supplémentaire avant la nouvelle ligne (\ r \ n). Veuillez changer postBody.append ("\ r \ n") à postBody.append ("\ r \ n") –

+0

C'était tout. Merci Aziz, tu as sauvé ma journée. Mettez votre commentaire en réponse, donc je peux l'accepter. – Rokker

Questions connexes