void setup(const QUrl &_uri, const HttpHeaders &_headers, const QHostAddress &connectAddr = QHostAddress(), int connectPort = -1, int _maxRedirects = -1, const QString &connectHostToTrust = QString()) { assert(!method.isEmpty()); QUrl uri = _uri; if(connectPort != -1) uri.setPort(connectPort); else if(uri.port() == -1) { if(uri.scheme() == "https") uri.setPort(443); else uri.setPort(80); } HttpHeaders headers = _headers; checkHosts += uri.host(QUrl::FullyEncoded); if(!connectAddr.isNull()) { curl_slist_free_all(dnsCache); if(!connectHostToTrust.isEmpty()) checkHosts += connectHostToTrust; QByteArray cacheEntry = uri.host(QUrl::FullyEncoded).toUtf8() + ':' + QByteArray::number(uri.port()) + ':' + connectAddr.toString().toUtf8(); dnsCache = curl_slist_append(dnsCache, cacheEntry.data()); curl_easy_setopt(easy, CURLOPT_RESOLVE, dnsCache); } curl_easy_setopt(easy, CURLOPT_URL, uri.toEncoded().data()); bool chunked = false; if(headers.contains("Content-Length")) { curl_off_t content_len = (curl_off_t)headers.get("Content-Length").toLongLong(); /*if(method == "POST") curl_easy_setopt(easy, CURLOPT_POSTFIELDSIZE_LARGE, content_len); else*/ curl_easy_setopt(easy, CURLOPT_INFILESIZE_LARGE, content_len); // curl will set this for us headers.removeAll("Content-Length"); } else { if(expectBody) chunked = true; else if(alwaysSetBody) curl_easy_setopt(easy, CURLOPT_INFILESIZE_LARGE, (curl_off_t)0); } curl_slist_free_all(headersList); foreach(const HttpHeader &h, headers) { QByteArray i = h.first + ": " + h.second; headersList = curl_slist_append(headersList, i.data()); }
void applyHeaders(const HttpHeaders &in, HttpHeaders *out) { *out += HttpHeader("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0"); QByteArray origin; if(in.contains("Origin")) origin = in.get("Origin"); else origin = "*"; *out += HttpHeader("Access-Control-Allow-Origin", origin); *out += HttpHeader("Access-Control-Allow-Credentials", "true"); }