当前位置: 首页 > 面试题库 >

使用QNetworkRequest的HTTP POST的正确格式

梁承恩
2023-03-14
问题内容

我正在尝试将JSON查询发送到Web服务,并且继续收到内部服务器错误作为对该查询的响应。

这是我要发送的内容:

POST /api/1.7/webservice.asmx HTTP/1.1
Host: www.superService.com
User-Agent: My app name v0.1
X-Custom-User-Agent: My app name v0.1
Content-Type: application/json
Content-Length:81

{"method":"AuthenticatePlain","loginName":"username@domain.com","password":"mypass"}

这应该发送到
https://www.superService.com/api/1.7/ssapi.asmx

在准备时QNetworkRequest,使用什么方法插入行

POST /api/1.7/webservice.asmx HTTP / 1.1

QNetworkRequest对象中是否包含完整的标头?
JSON数据应该在QNetworkRequest对象中还是作为方法中的第二个参数添加到帖子中QNetworkAccessManager::post()

这是我当前在on_btnLogin_clicked()插槽中的代码:

connect(m_qnam, SIGNAL(finished(QNetworkReply*)),
                 this, SLOT(handleNetworkData(QNetworkReply*)));
    connect(m_qnam,SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)),
                 this, SLOT(handleSSLErrors(QNetworkReply*)));

    QString baseString = "";
    baseString.append(QString("POST /api/1.7/webservice.asmx HTTP/1.1\r\n").toUtf8());  
    baseString.append(QString("www.superService.com\r\n").toUtf8());
    baseString.append(QString("User-Agent: My app name v0.1\r\n").toUtf8());
    baseString.append(QString("X-Custom-User-Agent: My app name v0.1\r\n").toUtf8());
    baseString.append(QString("Content-Type: application/json\r\n").toUtf8());

    QString jsonString = QString("{");
    jsonString.append("\"method\":");
    jsonString.append("\"AuthenticatePlain\"");
    jsonString.append(",\"loginName\":");
    jsonString.append("\"username@domain.com\"");
    jsonString.append(",\"password\":");
    jsonString.append("\"mypass\"");
    jsonString.append("}");

    QByteArray json = jsonString.toUtf8();

    baseString.append(QString("Content-Length:").toUtf8());
    baseString.append(QString::number(json.length()));
    baseString.append("\r\n").toUtf8();
    baseString.append(QString("\r\n").toUtf8());
    baseString.append(json);

    request = QNetworkRequest(QUrl("https://www.superService.com/api/1.7/ssapi.asmx"));
    request.setRawHeader()


    qDebug() << "Base String: "<< baseString;


    m_qnam->post(request,baseString.toUtf8());

问题答案:

这不是编写HTTP请求的正确方法。以下代码更正确:

connect(m_qnam, SIGNAL(finished(QNetworkReply*)), this, SLOT(handleNetworkData(QNetworkReply*)));
connect(m_qnam,SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)), this, SLOT(handleSSLErrors(QNetworkReply*)));

// Build your JSON string as usual
QByteArray jsonString = "{\"method\":\"AuthenticatePlain\",\"loginName\":\"username@domain.com\",\"password\":\"mypass\"}";

// For your "Content-Length" header
QByteArray postDataSize = QByteArray::number(jsonString.size());

// Time for building your request
QUrl serviceURL("https://www.superService.com/api/1.7/ssapi.asmx");
QNetworkRequest request(serviceURL);

// Add the headers specifying their names and their values with the following method : void QNetworkRequest::setRawHeader(const QByteArray & headerName, const QByteArray & headerValue);
request.setRawHeader("User-Agent", "My app name v0.1");
request.setRawHeader("X-Custom-User-Agent", "My app name v0.1");
request.setRawHeader("Content-Type", "application/json");
request.setRawHeader("Content-Length", postDataSize);

// Use QNetworkReply * QNetworkAccessManager::post(const QNetworkRequest & request, const QByteArray & data); to send your request. Qt will rearrange everything correctly.
QNetworkReply * reply = m_qnam->post(request, jsonString);


 类似资料:
  • 问题内容: 我有一个JSON格式的以下文件: 之前: 使用以下代码处理数据后: 我将JSON保存到另一个文件中: 问题是,保存文件后,格式损坏了: 我的问题是-如何在PowerShell中保留源格式? 问题答案: 由于您的原始json包含一个只有一个元素的数组,因此PowerShell会将其压缩为仅一个元素。如果在输出中希望再次将其作为数组,请使用rokumaru的好答案。 但是,PowerShe

  • 问题内容: 我试图用Python写出xml文件。问题在于它们总是在一行中生成。我希望能够轻松地引用它们,因此,如果我真的很希望能够将文件干净地写出。 这就是我得到的: 这是我想看到的: 问题答案: 您可以使用from的功能来做到这一点: 想法是将您的字符串打印出来,使用minidom进行解析,然后使用函数再次将其转换为XML 。 资料来源:http : //pymotw.com/2/xml/etr

  • 问题内容: 我有一个使用Doctrine 1的应用程序,并且通过生成对象的字段。它工作了好几年,但现在我有了一个新的笔记本,Doctrine尝试将字段作为字符串插入,而不是完全奇怪的普通MySQL datetime格式。 完全相同的代码可以在另一台计算机上正常运行。一切几乎都相同–两者均使用MySQL 5.6.12,PHP 5.3.15。知道我应该去哪里看吗? 更新 好的,在StackOverfl

  • 问题内容: 我已经看到JSON日期格式的许多不同标准: 哪一个是正确的?还是最好的?有什么标准吗? 问题答案: JSON本身 没有 指定日期应如何表示,但JavaScript却指定了。 您 应该 使用的方法发出的格式: 原因如下: 它是人类可读的,但也很简洁 排序正确 它包括小数秒,可以帮助重新建立时间顺序 符合ISO 8601 ISO 8601已经在国际上建立了十多年的历史 W3C,RFC333

  • 我在Go有一个现有项目,我正在使用协议缓冲区/gRPC。直到最近,go\u package选项还是可选的,并且生成的go package名称将与proto package名称相同。 此文件位于项目根目录中。生成的代码文件(authenticator.pb.go)位于同一位置。原型文件: Generation命令指定我要在同一目录中输出: 今天,我推出了新版本的协议缓冲区编译器和github。com