void tst_QUrlQuery::setQueryItems() { QFETCH(QueryItems, items); QUrlQuery query; QueryItems::const_iterator it = items.constBegin(); for ( ; it != items.constEnd(); ++it) query.addQueryItem(it->first, it->second); COMPARE_ITEMS(query.queryItems(), items); query.clear(); query.setQueryItems(items); COMPARE_ITEMS(query.queryItems(), items); }
void ParserResRobot::findStationsByName(const QString &stationName) { lastStationSearch = stationName; if (stationName.length() < 2) return; if (currentRequestState != FahrplanNS::noneRequest) return; currentRequestState = FahrplanNS::stationsByNameRequest; QUrl url(journeyBaseURL + QLatin1String("FindLocation.json")); #if defined(BUILD_FOR_QT5) QUrlQuery query; #else QUrl query; #endif query.addQueryItem("key", journeyAPIKey); query.addQueryItem("apiVersion", journeyAPIVersion); query.addQueryItem("from", stationName); query.addQueryItem("coordSys", "WGS84"); #if defined(BUILD_FOR_QT5) url.setQuery(query); #else url.setQueryItems(query.queryItems()); #endif sendHttpRequest(url); }
void ParserXmlVasttrafikSe::getTimeTableForStation(const Station ¤tStation, const Station &, const QDateTime &dateTime, Mode mode, int) { if (currentRequestState != FahrplanNS::noneRequest) return; currentRequestState = FahrplanNS::getTimeTableForStationRequest; m_timeTableForStationParameters.isValid = false; QUrl uri(baseRestUrl + (mode == Departure ? QLatin1String("departureBoard") : QLatin1String("arrivalBoard"))); #if defined(BUILD_FOR_QT5) QUrlQuery query; #else QUrl query; #endif query.addQueryItem("authKey", apiKey); query.addQueryItem("format", "xml"); query.addQueryItem("date", dateTime.toString("yyyy-MM-dd")); query.addQueryItem("time", dateTime.toString("hh:mm")); query.addQueryItem("id", currentStation.id.toString()); query.addQueryItem("useVas", "1"); query.addQueryItem("useLDTrain", "0"); query.addQueryItem("useRegTrain", "1"); query.addQueryItem("useBus", "1"); query.addQueryItem("useBoat", "1"); query.addQueryItem("useTram", "1"); query.addQueryItem("excludeDR", "1"); #if defined(BUILD_FOR_QT5) uri.setQuery(query); #else uri.setQueryItems(query.queryItems()); #endif sendHttpRequest(uri); }
void ParserResRobot::findStationsByCoordinates(qreal longitude, qreal latitude) { if (currentRequestState != FahrplanNS::noneRequest) return; currentRequestState = FahrplanNS::stationsByCoordinatesRequest; QUrl url(journeyBaseURL + QLatin1String("StationsInZone.json")); #if defined(BUILD_FOR_QT5) QUrlQuery query; #else QUrl query; #endif query.addQueryItem("key", journeyAPIKey); query.addQueryItem("apiVersion", journeyAPIVersion); query.addQueryItem("centerX", QString::number(longitude)); query.addQueryItem("centerY", QString::number(latitude)); query.addQueryItem("radius", QString::number(nearbyRadius)); query.addQueryItem("coordSys", "WGS84"); #if defined(BUILD_FOR_QT5) url.setQuery(query); #else url.setQueryItems(query.queryItems()); #endif sendHttpRequest(url); }
void ParserXmlVasttrafikSe::findStationsByCoordinates(qreal longitude, qreal latitude) { qDebug() << "ParserXmlVasttrafikSe::findStationsByCoordinates(longitude=" << longitude << ", latitude=" << latitude << ")"; if (currentRequestState != FahrplanNS::noneRequest) return; currentRequestState = FahrplanNS::stationsByCoordinatesRequest; QUrl uri(baseRestUrl + QLatin1String("location.nearbystops")); #if defined(BUILD_FOR_QT5) QUrlQuery query; #else QUrl query; #endif query.addQueryItem("authKey", apiKey); query.addQueryItem("format", "xml"); query.addQueryItem("originCoordLat", QString::number(latitude)); query.addQueryItem("originCoordLong", QString::number(longitude)); query.addQueryItem("maxNo", QString::number(5)); #if defined(BUILD_FOR_QT5) uri.setQuery(query); #else uri.setQueryItems(query.queryItems()); #endif sendHttpRequest(uri); }
void ParserResRobot::findStationsByName(const QString &stationName) { lastStationSearch = stationName; if (stationName.length() < 2) return; if (currentRequestState != FahrplanNS::noneRequest) return; currentRequestState = FahrplanNS::stationsByNameRequest; QUrl url(baseURL + QLatin1String("/location.name")); #if defined(BUILD_FOR_QT5) QUrlQuery query; #else QUrl query; #endif query.addQueryItem("key", journeyAPIKey); query.addQueryItem("input", stationName); query.addQueryItem("maxNo", "30"); // Max number of results if (QLocale().language() == QLocale::Swedish) query.addQueryItem("lang", "sv"); else if (QLocale().language() == QLocale::German) query.addQueryItem("lang", "de"); else query.addQueryItem("lang", "en"); query.addQueryItem("format", "json"); #if defined(BUILD_FOR_QT5) url.setQuery(query); #else url.setQueryItems(query.queryItems()); #endif sendHttpRequest(url); }
void ParserResRobot::findStationsByCoordinates(qreal longitude, qreal latitude) { if (currentRequestState != FahrplanNS::noneRequest) return; currentRequestState = FahrplanNS::stationsByCoordinatesRequest; QUrl url(baseURL + QLatin1String("/location.nearbystops")); #if defined(BUILD_FOR_QT5) QUrlQuery query; #else QUrl query; #endif query.addQueryItem("key", journeyAPIKey); query.addQueryItem("originCoordLat", QString::number(latitude)); query.addQueryItem("originCoordLong", QString::number(longitude)); query.addQueryItem("r", "1000"); // Radius in meters query.addQueryItem("maxNo", "30"); // Max number of results if (QLocale().language() == QLocale::Swedish) query.addQueryItem("lang", "sv"); else if (QLocale().language() == QLocale::German) query.addQueryItem("lang", "de"); else query.addQueryItem("lang", "en"); query.addQueryItem("format", "json"); #if defined(BUILD_FOR_QT5) url.setQuery(query); #else url.setQueryItems(query.queryItems()); #endif sendHttpRequest(url); }
void tst_QUrlQuery::old_queryItems() { // test imported from old tst_qurl.cpp QUrlQuery url; QList<QPair<QString, QString> > newItems; newItems += qMakePair(QString("1"), QString("a")); newItems += qMakePair(QString("2"), QString("b")); newItems += qMakePair(QString("3"), QString("c")); newItems += qMakePair(QString("4"), QString("a b")); newItems += qMakePair(QString("5"), QString("&")); newItems += qMakePair(QString("foo bar"), QString("hello world")); newItems += qMakePair(QString("foo+bar"), QString("hello+world")); newItems += qMakePair(QString("tex"), QString("a + b = c")); url.setQueryItems(newItems); QVERIFY(!url.isEmpty()); QList<QPair<QString, QString> > setItems = url.queryItems(); QVERIFY(newItems == setItems); url.addQueryItem("1", "z"); #if 0 // undefined behaviour in the new QUrlQuery QVERIFY(url.hasQueryItem("1")); QCOMPARE(url.queryItemValue("1").toLatin1().constData(), "a"); url.addQueryItem("1", "zz"); QStringList expected; expected += "a"; expected += "z"; expected += "zz"; QCOMPARE(url.allQueryItemValues("1"), expected); url.removeQueryItem("1"); QCOMPARE(url.allQueryItemValues("1").size(), 2); QCOMPARE(url.queryItemValue("1").toLatin1().constData(), "z"); #endif url.removeAllQueryItems("1"); QVERIFY(!url.hasQueryItem("1")); QCOMPARE(url.queryItemValue("4").toLatin1().constData(), "a b"); QCOMPARE(url.queryItemValue("5").toLatin1().constData(), "&"); QCOMPARE(url.queryItemValue("tex").toLatin1().constData(), "a + b = c"); QCOMPARE(url.queryItemValue("foo bar").toLatin1().constData(), "hello world"); //url.setUrl("http://www.google.com/search?q=a+b"); url.setQuery("q=a+b"); QCOMPARE(url.queryItemValue("q"), QString("a+b")); //url.setUrl("http://www.google.com/search?q=a=b"); // invalid, but should be tolerated url.setQuery("q=a=b"); QCOMPARE(url.queryItemValue("q"), QString("a=b")); }
/** * @internal * * @brief Create an AWS Signature version 1 canonical query. * * This function returns a string containing all non-empty query parameters in * sorted order (case-insensitive), with no separators at all. * * For example, for the following SQS query string: * * ?Action=CreateQueue&QueueName=queue2&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&SignatureVersion=1&Expires=2007-01-12T12:00:00Z&Version=2006-04-01 * * this function will return the following canonical form: * * ActionCreateQueueAWSAccessKeyIdAKIAIOSFODNN7EXAMPLEExpires2007-01-12T12:00:00ZQueueNamequeue2SignatureVersion1Version2006-04-01 * * This function is very similar to AwsAbstractSignature::canonicalQuery(), except * that: * 1. this function sorts case-insensitively, whereas AwsAbstractSignature::canonicalQuery() * use a byte sort (ie is case sensitive); and * 2. this function excludes parameters with empty values, where * AwsAbstractSignature::canonicalQuery() includes all query parameters, regardless * of content; and * 3. this function does not use any separators in the generated string, whereas * AwsAbstractSignature::canonicalQuery() uses `&` and `=` separators just as * you would expect to see them in a typical query string; and * 4. this function does not perform any URL encoding of the query parameters, * whereas AwsAbstractSignature::canonicalQuery() URL encodes both parameter * keys and values. * * The AwsAbstractSignature::canonicalQuery() function is used by the later signature * algorithms, such as AwsSignatureV2 and AwsSignatureV4, as required by Amazon. Instead * this function is specific to version 1 signatures. * * @param query Query to encode the HTTP query string from. * * @return An AWS Signature canonical query string. * * @see http://docs.aws.amazon.com/AmazonDevPay/latest/DevPayDeveloperGuide/LSAPI_Auth_REST.html#CalculatingHMACSignature */ QByteArray AwsSignatureV1Private::canonicalQuery(const QUrlQuery &query) const { QList<QStringPair> list = query.queryItems(QUrl::FullyDecoded); qSort(list.begin(), list.end(), AwsSignatureV1Private::caseInsensitiveLessThan); QString result; foreach (const QStringPair &pair, list) { if (!pair.second.isEmpty()) { result += pair.first + pair.second; } } return result.toUtf8(); }
ServerRequest::ServerRequest(const QHttpRequest &req) : _request(req) { _path = req.path(); #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 2) QUrlQuery query = QUrlQuery(req.url()); _queryItems = query.queryItems(); #else _queryItems = req.url().queryItems(); #endif //TODO: parse principal }
/** * @brief Create an AWS Signature canonical query. * * This function returns an HTTP query string in Amazon's canonical form. That is, * all query parameters are sorted by keys (**but not keys-then-values**), then * joined with `&` separators, in `key=value` pairs with both keys and values being * URL percent encoded. * * @note The canonical form produced by this function is used by Amazon's later * signature formats (versions 2, 3 and 4), but not their earlier formats * (versions 0 and 1). * * @param query Query to encode the HTTP query string from. * * @return An AWS Signature canonical query string. * * @see http://docs.aws.amazon.com/general/latest/gr/signature-version-2.html * @see http://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html */ QByteArray AwsAbstractSignaturePrivate::canonicalQuery(const QUrlQuery &query) const { typedef QPair<QString, QString> QStringPair; QList<QStringPair> list = query.queryItems(QUrl::FullyDecoded); qSort(list); QString result; foreach (const QStringPair &pair, list) { if (!result.isEmpty()) result += QLatin1Char('&'); result += QString::fromUtf8(QUrl::toPercentEncoding(pair.first)) + QLatin1Char('=') + QString::fromUtf8(QUrl::toPercentEncoding(pair.second)); } return result.toUtf8(); }
bool parseBitcoinURI(const QUrl &uri, SendCoinsRecipient *out) { // return if URI is not valid or is no sapcoin URI if(!uri.isValid() || uri.scheme() != QString("sapcoin")) return false; SendCoinsRecipient rv; rv.address = uri.path(); rv.amount = 0; #if QT_VERSION >= QT_VERSION_CHECK(5,0,0) QUrlQuery q; q.setQuery(uri.query()); QList<QPair<QString, QString> > items = q.queryItems(); #else QList<QPair<QString, QString> > items = uri.queryItems(); #endif for (QList<QPair<QString, QString> >::iterator i = items.begin(); i != items.end(); i++) { bool fShouldReturnFalse = false; if (i->first.startsWith("req-")) { i->first.remove(0, 4); fShouldReturnFalse = true; } if (i->first == "label") { rv.label = i->second; fShouldReturnFalse = false; } else if (i->first == "amount") { if(!i->second.isEmpty()) { if(!BitcoinUnits::parse(BitcoinUnits::SAP, i->second, &rv.amount)) { return false; } } fShouldReturnFalse = false; } if (fShouldReturnFalse) return false; } if(out) { *out = rv; } return true; }
void tst_QUrlQuery::encodedSetQueryItems() { QFETCH(QString, key); QFETCH(QString, value); QFETCH(QString, expectedQuery); QFETCH(QString, expectedKey); QFETCH(QString, expectedValue); QFETCH(QUrl::ComponentFormattingOptions, encoding); QUrlQuery query; query.addQueryItem(key, value); COMPARE_ITEMS(query.queryItems(encoding), QueryItems() << qItem(expectedKey, expectedValue)); QCOMPARE(query.query(encoding), expectedQuery); }
void ParserResRobot::getTimeTableForStation(const Station ¤tStation, const Station &directionStation, const QDateTime &dateTime, ParserAbstract::Mode mode, int trainrestrictions) { if (currentRequestState != FahrplanNS::noneRequest) return; currentRequestState = FahrplanNS::getTimeTableForStationRequest; timetableSearchMode = mode; QUrl url; if (mode == Arrival) url.setUrl(baseURL + QLatin1String("/arrivalBoard")); else url.setUrl(baseURL + QLatin1String("/departureBoard")); #if defined(BUILD_FOR_QT5) QUrlQuery query; #else QUrl query; #endif query.addQueryItem("key", timetableAPIKey); query.addQueryItem("id", stationIDv2(currentStation.id.toString())); if (directionStation.valid) query.addQueryItem("direction", stationIDv2(directionStation.id.toString())); query.addQueryItem("date", dateTime.toString("yyyy-MM-dd")); query.addQueryItem("time", dateTime.toString("hh:mm")); query.addQueryItem("maxJourneys", "30"); // Max number of results query.addQueryItem("passlist", "0"); // We don't need any intermediate stops in the result QString formattedRestrictions(formatRestrictions(trainrestrictions)); if (!formattedRestrictions.isEmpty()) query.addQueryItem("products", formattedRestrictions); if (QLocale().language() == QLocale::Swedish) query.addQueryItem("lang", "sv"); else if (QLocale().language() == QLocale::German) query.addQueryItem("lang", "de"); else query.addQueryItem("lang", "en"); query.addQueryItem("format", "json"); #if defined(BUILD_FOR_QT5) url.setQuery(query); #else url.setQueryItems(query.queryItems()); #endif qDebug() << "Searching for timetable:" << url.toString(); sendHttpRequest(url); }
void tst_QUrlQuery::differentDelimiters() { QUrlQuery query; query.setQueryDelimiters('(', ')'); { // parse: query.setQuery("foo(bar)hello(world)"); QueryItems expected; expected << qItem("foo", "bar") << qItem("hello", "world"); COMPARE_ITEMS(query.queryItems(), expected); COMPARE_ITEMS(query.queryItems(QUrl::FullyEncoded), expected); COMPARE_ITEMS(query.queryItems(QUrl::PrettyDecoded), expected); } { // reconstruct: // note the final ')' is missing because there are no further items QCOMPARE(query.query(), QString("foo(bar)hello(world")); } { // set items containing the new delimiters and the old ones query.clear(); query.addQueryItem("z(=)", "y(&)"); QCOMPARE(query.query(), QString("z%28=%29(y%28&%29")); QUrlQuery copy = query; QCOMPARE(query.query(), QString("z%28=%29(y%28&%29")); copy.setQueryDelimiters(QUrlQuery::defaultQueryValueDelimiter(), QUrlQuery::defaultQueryPairDelimiter()); QCOMPARE(copy.query(), QString("z(%3D)=y(%26)")); } }
void ParserXmlVasttrafikSe::searchJourney(const Station &departureStation, const Station &viaStation, const Station &arrivalStation, const QDateTime &dateTime, ParserAbstract::Mode mode, int trainrestrictions) { qDebug() << "ParserXmlVasttrafikSe::searchJourney(departureStation=" << departureStation.name << ", arrivalStation=" << arrivalStation.name << ", viaStation=" << viaStation.name << ", dateTime=" << dateTime.toString() << ", mode=" << mode << ", trainrestrictions=" << trainrestrictions << ")"; if (currentRequestState != FahrplanNS::noneRequest) return; currentRequestState = FahrplanNS::searchJourneyRequest; m_searchJourneyParameters.isValid = false; m_searchJourneyParameters.departureStation = departureStation; m_searchJourneyParameters.arrivalStation = arrivalStation; m_searchJourneyParameters.viaStation = viaStation; m_searchJourneyParameters.dateTime = dateTime; m_searchJourneyParameters.mode = mode; m_searchJourneyParameters.trainrestrictions = trainrestrictions; QUrl uri(baseRestUrl + QLatin1String("trip")); #if defined(BUILD_FOR_QT5) QUrlQuery query; #else QUrl query; #endif query.addQueryItem("authKey", apiKey); query.addQueryItem("format", "xml"); query.addQueryItem("date", dateTime.toString("yyyy-MM-dd")); query.addQueryItem("time", dateTime.toString("hh:mm")); query.addQueryItem("originId", departureStation.id.toString()); if (viaStation.valid) query.addQueryItem("viaId", viaStation.id.toString()); if (mode == Arrival) query.addQueryItem("searchForArrival", "yes"); query.addQueryItem("destId", arrivalStation.id.toString()); query.addQueryItem("useVas", "1"); query.addQueryItem("useLDTrain", "0"); query.addQueryItem("useRegTrain", "1"); query.addQueryItem("useBus", "1"); query.addQueryItem("useBoat", "1"); query.addQueryItem("useTram", "1"); query.addQueryItem("excludeDR", "1"); query.addQueryItem("numTrips", "5"); #if defined(BUILD_FOR_QT5) uri.setQuery(query); #else uri.setQueryItems(query.queryItems()); #endif sendHttpRequest(uri); }
QHash<QString, QString> HTTPConnection::parseUrlEncodedForm() { // make sure we have the correct MIME type QList<QByteArray> elements = _requestHeaders.value("Content-Type").split(';'); QString contentType = elements.at(0).trimmed(); if (contentType != "application/x-www-form-urlencoded") { return QHash<QString, QString>(); } QUrlQuery form { _requestContent }; QHash<QString, QString> pairs; for (auto pair : form.queryItems()) { auto key = QUrl::fromPercentEncoding(pair.first.toLatin1().replace('+', ' ')); auto value = QUrl::fromPercentEncoding(pair.second.toLatin1().replace('+', ' ')); pairs[key] = value; } return pairs; }
void ParserHafasXml::findStationsByCoordinates(qreal longitude, qreal latitude) { if (currentRequestState != FahrplanNS::noneRequest) { return; } currentRequestState = FahrplanNS::stationsByCoordinatesRequest; //We must format the lat and longitude to have the ??.?????? format. QString zeros = "0"; QString sLongitude = QString::number(longitude).append(zeros.repeated(6)); QString sLatitude = QString::number(latitude).append(zeros.repeated(6)); QRegExp regexp = QRegExp("(\\d*)\\.(\\d\\d\\d\\d\\d\\d)(\\d*)"); regexp.setMinimal(true); regexp.indexIn(sLongitude); sLongitude = regexp.cap(1) + regexp.cap(2); regexp.indexIn(sLatitude); sLatitude = regexp.cap(1) + regexp.cap(2); QUrl uri(baseUrl + "/eol"); #if defined(BUILD_FOR_QT5) QUrlQuery query; #else QUrl query; #endif query.addQueryItem("look_x", sLongitude); query.addQueryItem("look_y", sLatitude); query.addQueryItem("performLocating", "2"); query.addQueryItem("tpl", "stopsnear"); query.addQueryItem("L", "vs_java"); query.addQueryItem("look_maxdist", "5000"); query.addQueryItem("look_maxno", "40"); #if defined(BUILD_FOR_QT5) uri.setQuery(query); #else uri.setQueryItems(query.queryItems()); #endif sendHttpRequest(uri); }
void ParserXmlVasttrafikSe::findStationsByName(const QString &stationName) { qDebug() << "ParserXmlVasttrafikSe::findStationsByName(stationName" << stationName << ")"; if (currentRequestState != FahrplanNS::noneRequest) return; currentRequestState = FahrplanNS::stationsByNameRequest; QUrl uri(baseRestUrl + QLatin1String("location.name")); #if defined(BUILD_FOR_QT5) QUrlQuery query; #else QUrl query; #endif query.addQueryItem("authKey", apiKey); query.addQueryItem("format", "xml"); query.addQueryItem("input", stationName); #if defined(BUILD_FOR_QT5) uri.setQuery(query); #else uri.setQueryItems(query.queryItems()); #endif sendHttpRequest(uri); }
QPlaceSearchReply *QPlaceManagerEngineNokiaV2::search(const QPlaceSearchRequest &query) { bool unsupported = false; unsupported |= query.visibilityScope() != QLocation::UnspecifiedVisibility && query.visibilityScope() != QLocation::PublicVisibility; unsupported |= !query.searchTerm().isEmpty() && query.offset() > 0; // Both a search term and search categories are not supported. unsupported |= !query.searchTerm().isEmpty() && !query.categories().isEmpty(); //only a recommendation id by itself is supported. unsupported |= !query.recommendationId().isEmpty() && (!query.searchTerm().isEmpty() || !query.categories().isEmpty() || query.searchArea().type() != QGeoShape::UnknownType); if (unsupported) { QPlaceSearchReplyImpl *reply = new QPlaceSearchReplyImpl(query, 0, this); connect(reply, SIGNAL(finished()), this, SLOT(replyFinished())); connect(reply, SIGNAL(error(QPlaceReply::Error,QString)), this, SLOT(replyError(QPlaceReply::Error,QString))); QMetaObject::invokeMethod(reply, "setError", Qt::QueuedConnection, Q_ARG(QPlaceReply::Error, QPlaceReply::BadArgumentError), Q_ARG(QString, "Unsupported search request options specified.")); return reply; } QUrlQuery queryItems; // Check that the search area is valid for all searches except recommendation and proposed // searches, which do not need search centers. if (query.recommendationId().isEmpty() && !query.searchContext().isValid()) { if (!addAtForBoundingArea(query.searchArea(), &queryItems)) { QPlaceSearchReplyImpl *reply = new QPlaceSearchReplyImpl(query, 0, this); connect(reply, SIGNAL(finished()), this, SLOT(replyFinished())); connect(reply, SIGNAL(error(QPlaceReply::Error,QString)), this, SLOT(replyError(QPlaceReply::Error,QString))); QMetaObject::invokeMethod(reply, "setError", Qt::QueuedConnection, Q_ARG(QPlaceReply::Error, QPlaceReply::BadArgumentError), Q_ARG(QString, "Invalid search area provided")); return reply; } } QNetworkReply *networkReply = 0; if (query.searchContext().userType() == qMetaTypeId<QUrl>()) { // provided search context QUrl u = query.searchContext().value<QUrl>(); typedef QPair<QString, QString> QueryItem; QList<QueryItem> queryItemList = queryItems.queryItems(QUrl::FullyEncoded); queryItems = QUrlQuery(u); foreach (const QueryItem &item, queryItemList) queryItems.addQueryItem(item.first, item.second); if (query.limit() > 0) queryItems.addQueryItem(QStringLiteral("size"), QString::number(query.limit())); if (query.offset() > -1) queryItems.addQueryItem(QStringLiteral("offset"), QString::number(query.offset())); u.setQuery(queryItems); networkReply = sendRequest(u); } else if (!query.searchTerm().isEmpty()) {
void ParserHafasXml::getTimeTableForStation(const Station ¤tStation, const Station &directionStation, const QDateTime &dateTime, ParserAbstract::Mode mode, int trainrestrictions) { if (currentRequestState != FahrplanNS::noneRequest) { return; } currentRequestState = FahrplanNS::getTimeTableForStationRequest; if (STTableMode == 0) { currentRequestState = FahrplanNS::getTimeTableForStationRequest; QString trainrestr = getTrainRestrictionsCodes(trainrestrictions); QByteArray postData = ""; postData.append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?><ReqC accessId=\"" + hafasHeader.accessid + "\" ver=\"" + hafasHeader.ver + "\" prod=\"" + hafasHeader.prod + "\" lang=\"EN\">"); postData.append("<STBReq boardType=\""); if (mode == Departure) { postData.append("DEP"); } else /* (getTimeTableForStationRequestData.mode == Arrival) */ { postData.append("ARR"); } postData.append("\" maxJourneys=\"40\">"); postData.append("<Time>"); postData.append(dateTime.toString("hh:mm")); postData.append("</Time>"); postData.append("<Period><DateBegin><Date>"); postData.append(dateTime.toString("yyyyMMdd")); postData.append("</Date></DateBegin><DateEnd><Date>"); postData.append(dateTime.toString("yyyyMMdd")); postData.append("</Date></DateEnd></Period>"); postData.append("<TableStation externalId=\""); postData.append(parseExternalIds(currentStation.id)); postData.append("\"></TableStation>"); postData.append("<ProductFilter>"); postData.append(trainrestr); postData.append("</ProductFilter>"); postData.append("<DirectionFilter externalId=\""); postData.append(parseExternalIds(directionStation.id)); postData.append("\"></DirectionFilter>"); postData.append("</STBReq>"); postData.append("</ReqC>"); qDebug() << postData; sendHttpRequest(QUrl(baseXmlUrl), postData); } if (STTableMode == 1) { QString trainrestr = getTrainRestrictionsCodes(trainrestrictions); QUrl uri(baseSTTableUrl); #if defined(BUILD_FOR_QT5) QUrlQuery query; #else QUrl query; #endif query.addQueryItem("productsFilter", trainrestr); if (mode == Departure) { query.addQueryItem("boardType", "dep"); } else /* (getTimeTableForStationRequestData.mode == Arrival) */ { query.addQueryItem("boardType", "arr"); } query.addQueryItem("date", dateTime.toString("dd.MM.yyyy")); query.addQueryItem("time", dateTime.toString("hh:mm")); query.addQueryItem("input", currentStation.name); query.addQueryItem("REQ0JourneyStopsSID", currentStation.id.toString()); query.addQueryItem("maxJourneys", "50"); query.addQueryItem("start", "yes"); query.addQueryItem("L", "vs_java3"); #if defined(BUILD_FOR_QT5) uri.setQuery(query); #else uri.setQueryItems(query.queryItems()); #endif sendHttpRequest(uri); } }
void tst_QUrlQuery::constructing() { QUrlQuery empty; QVERIFY(empty.isEmpty()); QCOMPARE(empty.queryPairDelimiter(), QUrlQuery::defaultQueryPairDelimiter()); QCOMPARE(empty.queryValueDelimiter(), QUrlQuery::defaultQueryValueDelimiter()); // undefined whether it is detached, but don't crash QVERIFY(empty.isDetached() || !empty.isDetached()); empty.clear(); QVERIFY(empty.isEmpty()); { QUrlQuery copy(empty); QVERIFY(copy.isEmpty()); QVERIFY(!copy.isDetached()); QVERIFY(copy == empty); QVERIFY(!(copy != empty)); copy = empty; QVERIFY(copy == empty); copy = QUrlQuery(); QVERIFY(copy == empty); } { QUrlQuery copy(emptyQuery()); QVERIFY(copy == empty); } QVERIFY(!empty.hasQueryItem("a")); QVERIFY(empty.queryItemValue("a").isEmpty()); QVERIFY(empty.allQueryItemValues("a").isEmpty()); QVERIFY(!empty.hasQueryItem("")); QVERIFY(empty.queryItemValue("").isEmpty()); QVERIFY(empty.allQueryItemValues("").isEmpty()); QVERIFY(!empty.hasQueryItem(QString())); QVERIFY(empty.queryItemValue(QString()).isEmpty()); QVERIFY(empty.allQueryItemValues(QString()).isEmpty()); QVERIFY(empty.queryItems().isEmpty()); QUrlQuery other; other.addQueryItem("a", "b"); QVERIFY(!other.isEmpty()); QVERIFY(other.isDetached()); QVERIFY(other != empty); QVERIFY(!(other == empty)); QUrlQuery copy(other); QVERIFY(copy == other); copy.clear(); QVERIFY(copy.isEmpty()); QVERIFY(copy != other); copy = other; QVERIFY(!copy.isEmpty()); QVERIFY(copy == other); copy = QUrlQuery(); QVERIFY(copy.isEmpty()); empty.setQueryDelimiters('(', ')'); QCOMPARE(empty.queryValueDelimiter(), QChar(QLatin1Char('('))); QCOMPARE(empty.queryPairDelimiter(), QChar(QLatin1Char(')'))); QList<QPair<QString, QString> > query; query += qMakePair(QString("type"), QString("login")); query += qMakePair(QString("name"), QString::fromUtf8("åge nissemannsen")); query += qMakePair(QString("ole&du"), QString::fromUtf8("anne+jørgen=sant")); query += qMakePair(QString("prosent"), QString("%")); copy.setQueryItems(query); QVERIFY(!copy.isEmpty()); }
void tst_QUrlQuery::addRemove() { QUrlQuery query; { // one item query.addQueryItem("a", "b"); QVERIFY(!query.isEmpty()); QVERIFY(query.hasQueryItem("a")); QCOMPARE(query.queryItemValue("a"), QString("b")); QCOMPARE(query.allQueryItemValues("a"), QStringList() << "b"); QList<QPair<QString, QString> > allItems = query.queryItems(); QCOMPARE(allItems.count(), 1); QCOMPARE(allItems.at(0).first, QString("a")); QCOMPARE(allItems.at(0).second, QString("b")); } QUrlQuery original = query; { // two items query.addQueryItem("c", "d"); QVERIFY(query.hasQueryItem("a")); QCOMPARE(query.queryItemValue("a"), QString("b")); QCOMPARE(query.allQueryItemValues("a"), QStringList() << "b"); QVERIFY(query.hasQueryItem("c")); QCOMPARE(query.queryItemValue("c"), QString("d")); QCOMPARE(query.allQueryItemValues("c"), QStringList() << "d"); QList<QPair<QString, QString> > allItems = query.queryItems(); QCOMPARE(allItems.count(), 2); QVERIFY(allItems.contains(qItem("a", "b"))); QVERIFY(allItems.contains(qItem("c", "d"))); QVERIFY(query != original); QVERIFY(!(query == original)); } { // remove an item that isn't there QUrlQuery copy = query; query.removeQueryItem("e"); QCOMPARE(query, copy); } { // remove an item query.removeQueryItem("c"); QVERIFY(query.hasQueryItem("a")); QCOMPARE(query.queryItemValue("a"), QString("b")); QCOMPARE(query.allQueryItemValues("a"), QStringList() << "b"); QList<QPair<QString, QString> > allItems = query.queryItems(); QCOMPARE(allItems.count(), 1); QCOMPARE(allItems.at(0).first, QString("a")); QCOMPARE(allItems.at(0).second, QString("b")); QVERIFY(query == original); QVERIFY(!(query != original)); } { // add an item with en empty value QString emptyButNotNull(0, Qt::Uninitialized); QVERIFY(emptyButNotNull.isEmpty()); QVERIFY(!emptyButNotNull.isNull()); query.addQueryItem("e", ""); QVERIFY(query.hasQueryItem("a")); QCOMPARE(query.queryItemValue("a"), QString("b")); QCOMPARE(query.allQueryItemValues("a"), QStringList() << "b"); QVERIFY(query.hasQueryItem("e")); QCOMPARE(query.queryItemValue("e"), emptyButNotNull); QCOMPARE(query.allQueryItemValues("e"), QStringList() << emptyButNotNull); QList<QPair<QString, QString> > allItems = query.queryItems(); QCOMPARE(allItems.count(), 2); QVERIFY(allItems.contains(qItem("a", "b"))); QVERIFY(allItems.contains(qItem("e", emptyButNotNull))); QVERIFY(query != original); QVERIFY(!(query == original)); } { // remove the items query.removeQueryItem("a"); query.removeQueryItem("e"); QVERIFY(query.isEmpty()); } }