带有Qt的HMRC MTD Hello World

时间:2019-03-27 13:26:43

标签: json qt http

我有一个Qt程序,将我所有的小型公司信息存储在sql数据库中,多年来,我一直对其进行定制以处理我的所有会计工作,发票,BOM等。

按一下按钮,我可以获取所有必需的sql数据来计算季度增值税申报单,但我们现在必须以电子方式提交所有数据,而不仅仅是计算。我拥有所有需要的数据,这只是使用json通过HTTP提交的一种情况(我对此一无所知)。

我足够小,因此我现在不必提交此提交,但是时间可能会到来,所以我尝试以HMRC沙箱中最基本的请求为起点。

this页上,它向您展示了如何在Java中进行hello world请求,因此我正在尝试使用C ++对Qt进行同样的操作。

我已经尝试了以下对按钮按下做出响应的方法,当然,我还设置了一个插槽来处理响应:

void MainWindow::hello()
{

QJsonObject json;
QString rs("https://test-api.service.hmrc.gov.uk/hello/world");

QNetworkRequest request
    {
    QUrl(rs)
    };

request.setHeader(QNetworkRequest::ContentTypeHeader,"application/vnd.hmrc.1.0+json");
request.setUrl(QUrl(rs));
manager->get(request);


}

和主窗口init:

 manager = new QNetworkAccessManager();

    QObject::connect
            (manager, &QNetworkAccessManager::finished, this, [=](QNetworkReply *reply)
                {
                if (reply->error())
                    {
                    ui->debugText->appendHtml(reply->errorString());                    
                    return;
                    }        
                QString answer = reply->readAll();
                ui->debugText->appendHtml(answer);                
                }
            );

我收到答复:

  

传输https://test-api.service.hmrc.gov.uk/hello/world时出错-   服务器回复:不可接受

我认为这意味着我正在与服务器通信,但是我不知道此简短错误消息的含义!

HMRC网页上的Java如下:

// construct the GET request for our Hello World endpoint
HttpClient client = HttpClientBuilder.create().build();
HttpGet request = new HttpGet(
  "https://test-api.service.hmrc.gov.uk/hello/world");
request.addHeader("Accept", "application/vnd.hmrc.1.0+json");

// execute the request
HttpResponse response = client.execute(request);

// extract the HTTP status code and response body
int statusCode = response.getStatusLine().getStatusCode();
String responseBody = EntityUtils.toString(response.getEntity());

请问有人提供足够的信息来指出我做错了什么吗?怀疑我在这里没有基本要点。

1 个答案:

答案 0 :(得分:1)

在您的Java示例中,您正在设置HTTP标头“ Accept”。在您的C ++ / Qt代码段中,您正在设置“ Content-Type”标头。

您可能想要像这样修改代码以匹配Java工作示例:

QNetworkRequest request { QUrl(rs) };

request.setRawHeader(QByteArray("Accept"), QByteArray("application/vnd.hmrc.1.0+json"));
manager->get(request);