我有一个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());
请问有人提供足够的信息来指出我做错了什么吗?怀疑我在这里没有基本要点。
答案 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);