В чем проблема с моим кодом (пост http) - PullRequest
0 голосов
/ 10 ноября 2010

Я занимаюсь разработкой простого приложения, которое загружает изображение на yfrog.com (эти изображения будут отражены в твиттере). Вот мой код Но это не работает. Я не получаю ответ от сервера.

QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QNetworkRequest request(QUrl("http://yfrog.com/api/uploadAndPost"));

QByteArray data;
QUrl params,params1;
QFile file("some image path");
QString boundary("-----abcde12345");
QString body = "\r\n--" + boundary + "\r\n";

params.addQueryItem("username",twitterusername);
params.addQueryItem("password",twitterpassword);
params.addQueryItem("message",some message...);
params.addQueryItem("key",mydeveloperkey);


data.append(body);
data.append(params.toString());
QByteArray ba;
ba=file.readAll();
QString body1(ba);
params1.addQueryItem("media",body1);
data.append(params1.toString());
data.append(body);


request.setRawHeader("Content-Type","multipart/form-data; boundary=-----abcde12345");
request.setHeader(QNetworkRequest::ContentLengthHe ader,data.size());

QNetworkReply *reply = manager->post(request,data);

reply->waitForReadyRead(-1);
qDebug() << "replay :"<<reply->readAll();

Если я проверил запрошенные TCP-пакеты от wireshark, он выдает сообщение об ошибке типа «неправильно сформированные пакеты».

Для справки: http://code.google.com/p/imageshacka...GuploadAndPost

Пожалуйста, помогите телу по этому поводу. Где я делаю не так?

1 Ответ

0 голосов
/ 13 ноября 2010

QNetworkReply :: waitForReadyRead не имеет реализации, поэтому он всегда ссылается на базовый класс waitForReadyRead () (в данном случае QIODevice).В базовом классе вы увидите, что waitForReadyRead всегда возвращает FALSE.

Из документов вы должны вместо этого использовать сигнал readRead () в QNetworkReply и читать данные при вызове слота.

 QNetworkReply *reply = manager->get(request);
 connect(reply, SIGNAL(readyRead()), this, SLOT(slotReadyRead()));
...