我的代码有什么问题(http post)

时间:2010-11-10 13:45:35

标签: http qt post twitter yfrog

我正在开发一个将图像上传到yfrog.com的简单应用程序。(这些图像将反映在Twitter帐户中)。这是我的代码。但它不起作用。我没有得到服务器的响应。

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();

如果我检查了来自wireshark的请求的TCP数据包,它会发出错误消息,例如'畸形数据包'。

供参考:http://code.google.com/p/imageshacka...GuploadAndPost

请关于此的任何身体帮助。我做错了什么?

1 个答案:

答案 0 :(得分:0)

QNetworkReply :: waitForReadyRead没有实现,因此它总是引用基类waitForReadyRead()(在本例中为QIODevice)。在基类中,您将看到waitForReadyRead始终返回FALSE。

从文档中,您必须在QNetworkReply中使用readRead()信号,并在调用插槽时读取数据。

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