2013-05-10 4 views
0

영어가 부족합니다.Qt/쿠키 - 웹 사이트에 게시물을 보내는 방법 (phpbb3)

문제점 : 포럼 phpbb3에서 메시지를 보낼 수 없습니다. 로그인 할 수 있습니다. 메시지를 보낼 수 없습니다. 포럼에 로그인하면 성공합니다. 게시물을 보내지 않고 있습니다.

내 소스 코드 :

dialog.h

#ifndef DIALOG_H 
#define DIALOG_H 

#include <QDialog> 
#include <QNetworkAccessManager> 
#include <QNetworkRequest> 
#include <QNetworkReply> 
#include <QNetworkCookie> 
#include <QNetworkCookieJar> 
#include <QDebug> 
#include <QList> 

namespace Ui { 
class Dialog; 
} 

class Dialog : public QDialog 
{ 
    Q_OBJECT 

public: 
    explicit Dialog(QWidget *parent = 0); 
    ~Dialog(); 

private: 
    Ui::Dialog *ui; 
    QNetworkAccessManager *manager; 
    QList <QNetworkCookie> cookie; 
    QList <QByteArray> listt; 
    QNetworkRequest request; 
    QNetworkReply *reply; 
    QVariant var; 
    QNetworkCookieJar *cookiejar; 

public slots: 
    void mySlot(QNetworkReply *); 
}; 
#endif // DIALOG_H 

dialog.cpp

#include "dialog.h" 
#include "ui_dialog.h" 

Dialog::Dialog(QWidget *parent) : 
    QDialog(parent), 
    ui(new Ui::Dialog) 
{ 
    ui->setupUi(this); 

    manager = new QNetworkAccessManager(this); 
    cookiejar = new QNetworkCookieJar(manager); 
    connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(mySlot(QNetworkReply*))); 

    //login on www 
    QByteArray postData; 
    QUrl paare; 
    request.setUrl(QUrl("http://127.0.0.1/ucp.php?mode=login")); 
    request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/x-www-form-urlencoded")); 
    request.setRawHeader("User-Agent", "Firefox/3.0.10"); 
    paare.addQueryItem("username", "Moderator"); 
    paare.addQueryItem("password", "moderator"); 
    paare.addQueryItem("login", ""); 
    postData = paare.encodedQuery(); 
    reply = manager->post(request, postData); 
    //end of login on www - effect: OK 

    //send post on www 
    paare.clear(); 
    postData.clear(); 
    request.setUrl(QUrl("http://127.0.0.1/posting.php?mode=reply&f=2&t=1")); 
    paare.addQueryItem("message", "my message ..."); 
    paare.addQueryItem("post", ""); 
    postData = paare.encodedQuery(); 
    manager->post(request, postData); 
    //end of send post on www - effect: fail 
} 

Dialog::~Dialog() 
{ 
    delete ui; 
} 

void Dialog::mySlot(QNetworkReply *e) 
{ 
    if(e->error() == QNetworkReply::NoError) 
    { 
     qDebug() << "OK!"; 
    } 
    else 
    { 
     qDebug() << "ERROR! " << e->errorString(); 
    } 
} 

그것은 사람을 도움이 될 것입니다?


#include "dialog.h" 
#include "ui_dialog.h" 

Dialog::Dialog(QWidget *parent) : 
    QDialog(parent), 
    ui(new Ui::Dialog) 
{ 
    ui->setupUi(this); 

    manager = new QNetworkAccessManager(this); 
    cookiejar = new QNetworkCookieJar(manager); 
    connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(mySlot(QNetworkReply*))); 

    //login on www 
    request.setUrl(QUrl("http://127.0.0.1/ucp.php?mode=login")); 
    request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/x-www-form-urlencoded")); 
    request.setRawHeader("User-Agent", "Firefox/3.0.10"); 
    paare.addQueryItem("username", "Moderator"); 
    paare.addQueryItem("password", "moderator"); 
    paare.addQueryItem("login", ""); 
    postData = paare.encodedQuery(); 
    reply = manager->post(request, postData); 
    //end of login on www - effect: OK 
} 

Dialog::~Dialog() 
{ 
    delete ui; 
} 

void Dialog::mySlot(QNetworkReply *e) 
{ 
    if(e->error() == QNetworkReply::NoError) 
    { 
     qDebug() << "OK!"; 
     qDebug() << e->realAll(); 
    } 
    else 
    { 
     qDebug() << "ERROR! " << e->errorString(); 
    } 

    //send post on www 
    paare.clear(); 
    postData.clear(); 
    request.setUrl(QUrl("http://127.0.0.1/posting.php?mode=reply&f=2&t=1")); 
    paare.addQueryItem("message", "my message ..."); 
    paare.addQueryItem("post", ""); 
    postData = paare.encodedQuery(); 
    manager->post(request, postData); 
    //end of send post on www - effect: fail 
} 

감사

여전히 작동하지 않습니다/ 메시지를 보낼 수 없습니다.

qDebug() < < e-> realAll(); ... 제출 된 양식이 유효하지 않습니다. 다시 제출하십시오. ... 왜?

답변

0

관리자가 완료되기 전에 로그인 요청을 보낸 직후에 메시지를 게시하고 있습니다. 그래서 메시지 요청을 보내면 로그인 세션이 시작되지 않습니다. 메시지 전송 코드를 mySlot()에 넣으십시오.