fix restclient corrupting requests

This commit is contained in:
mrbesen 2023-06-12 20:19:37 +02:00
parent 61c64def43
commit 201f3665b3
Signed by untrusted user: MrBesen
GPG Key ID: 596B2350DCD67504
2 changed files with 16 additions and 13 deletions

View File

@ -46,3 +46,5 @@ protected:
bool disableCertCheck = false;
#endif
};
const char* toString(RestClient::Method);

View File

@ -81,9 +81,11 @@ QByteArray RestClient::requestRaw(const QString& url, Method m, const QString& d
if (!curl) return {};
QString requrl = baseurl + url;
curl_easy_setopt(curl, CURLOPT_URL, requrl.toLocal8Bit().data());
const QByteArray reqArr = requrl.toLocal8Bit();
curl_easy_setopt(curl, CURLOPT_URL, reqArr.data());
curl_easy_setopt(curl, CURLOPT_USERPWD, basicauth.toLocal8Bit().data());
const QByteArray basicArr = basicauth.toLocal8Bit();
curl_easy_setopt(curl, CURLOPT_USERPWD, basicArr.data());
curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
if (disableCertCheck) {
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
@ -99,6 +101,7 @@ QByteArray RestClient::requestRaw(const QString& url, Method m, const QString& d
struct curl_slist* headerlist = NULL;
headerlist = curl_slist_append(headerlist, "Accept: application/json");
const QByteArray dataArr = data.toLocal8Bit();
switch (m) {
default:
@ -106,22 +109,14 @@ QByteArray RestClient::requestRaw(const QString& url, Method m, const QString& d
curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L); break;
case Method::POST:
curl_easy_setopt(curl, CURLOPT_POST, 1L);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data.toLocal8Bit().data());
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, dataArr.data());
headerlist = curl_slist_append(headerlist, "Content-Type: application/json");
break;
case Method::PUT:
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT"); // to use the POSTFIELDS (do not use CURLOPT_PUT, it does not support POSTFIELDS)
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data.toLocal8Bit().data());
headerlist = curl_slist_append(headerlist, "Content-Type: application/json");
break;
case Method::PATCH:
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data.toLocal8Bit().data());
headerlist = curl_slist_append(headerlist, "Content-Type: application/json");
break;
case Method::DELETE:
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data.toLocal8Bit().data());
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, toString(m)); // to use the POSTFIELDS (do not use CURLOPT_PUT, it does not support POSTFIELDS)
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, dataArr.data());
headerlist = curl_slist_append(headerlist, "Content-Type: application/json");
break;
}
@ -184,3 +179,9 @@ QString RestClient::escape(const QString& in) const {
curl_free(e);
return esc;
}
const char* toString(RestClient::Method m) {
static const char* MethodNames[] = {"GET", "POST", "PUT", "PATCH", "DELETE"};
return MethodNames[(int) m];
}