void QgsWFSFeatureHitsAsyncRequest::launch( const QUrl &url )
{
  sendGET( url,
           false, /* synchronous */
           true, /* forceRefresh */
           false /* cache */ );
}
bool QgsWFSDescribeFeatureType::requestFeatureType( const QString& WFSVersion,
    const QString& typeName )
{
  QUrl url( baseURL() );
  url.addQueryItem( "REQUEST", "DescribeFeatureType" );
  url.addQueryItem( "VERSION", WFSVersion );
  url.addQueryItem( "TYPENAME", typeName );

  return sendGET( url, true, false );
}
Beispiel #3
0
bool QgsWfsRequest::sendPOST( const QUrl &url, const QString &contentTypeHeader, const QByteArray &data )
{
  abort(); // cancel previous
  mIsAborted = false;
  mTimedout = false;
  mGotNonEmptyResponse = false;

  mErrorMessage.clear();
  mErrorCode = QgsWfsRequest::NoError;
  mForceRefresh = true;
  mResponse.clear();

  if ( url.toEncoded().contains( "fake_qgis_http_endpoint" ) )
  {
    // Hack for testing purposes
    QUrl modifiedUrl( url );
    modifiedUrl.addQueryItem( QStringLiteral( "POSTDATA" ), QString::fromUtf8( data ) );
    return sendGET( modifiedUrl, true, true, false );
  }

  QNetworkRequest request( url );
  QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsWfsRequest" ) );
  if ( !mUri.auth().setAuthorization( request ) )
  {
    mErrorCode = QgsWfsRequest::NetworkError;
    mErrorMessage = errorMessageFailedAuth();
    QgsMessageLog::logMessage( mErrorMessage, tr( "WFS" ) );
    return false;
  }
  request.setHeader( QNetworkRequest::ContentTypeHeader, contentTypeHeader );

  mReply = QgsNetworkAccessManager::instance()->post( request, data );
  mReply->setReadBufferSize( READ_BUFFER_SIZE_HINT );
  if ( !mUri.auth().setAuthorizationReply( mReply ) )
  {
    mErrorCode = QgsWfsRequest::NetworkError;
    mErrorMessage = errorMessageFailedAuth();
    QgsMessageLog::logMessage( mErrorMessage, tr( "WFS" ) );
    return false;
  }
  connect( mReply, &QNetworkReply::finished, this, &QgsWfsRequest::replyFinished );
  connect( mReply, &QNetworkReply::downloadProgress, this, &QgsWfsRequest::replyProgress );

  QEventLoop loop;
  connect( this, &QgsWfsRequest::downloadFinished, &loop, &QEventLoop::quit );
  loop.exec( QEventLoop::ExcludeUserInputEvents );

  return mErrorMessage.isEmpty();
}
Beispiel #4
0
bool QgsWfsCapabilities::requestCapabilities( bool synchronous )
{
  QUrl url( baseURL() );
  url.addQueryItem( "REQUEST", "GetCapabilities" );

  const QString& version = mUri.version();
  if ( version == QgsWFSConstants::VERSION_AUTO )
    // MapServer honours the order with the first value being the preferred one
    url.addQueryItem( "ACCEPTVERSIONS", "2.0.0,1.1.0,1.0.0" );
  else
    url.addQueryItem( "VERSION", version );

  if ( !sendGET( url, synchronous, false ) )
  {
    emit gotCapabilities();
    return false;
  }
  return true;
}
Beispiel #5
0
bool QgsWFSRequest::sendPOST( const QUrl& url, const QString& contentTypeHeader, const QByteArray& data )
{
    abort(); // cancel previous
    mIsAborted = false;
    mTimedout = false;
    mGotNonEmptyResponse = false;

    mErrorMessage.clear();
    mErrorCode = QgsWFSRequest::NoError;
    mForceRefresh = true;
    mResponse.clear();

    if ( url.toEncoded().contains( "fake_qgis_http_endpoint" ) )
    {
        // Hack for testing purposes
        QUrl modifiedUrl( url );
        modifiedUrl.addQueryItem( "POSTDATA", QString::fromUtf8( data ) );
        return sendGET( modifiedUrl, true, true, false );
    }

    QNetworkRequest request( url );
    if ( !mUri.auth().setAuthorization( request ) )
    {
        mErrorCode = QgsWFSRequest::NetworkError;
        mErrorMessage = errorMessageFailedAuth();
        QgsMessageLog::logMessage( mErrorMessage, tr( "WFS" ) );
        return false;
    }
    request.setHeader( QNetworkRequest::ContentTypeHeader, contentTypeHeader );

    mReply = QgsNetworkAccessManager::instance()->post( request, data );
    connect( mReply, SIGNAL( finished() ), this, SLOT( replyFinished() ) );
    connect( mReply, SIGNAL( downloadProgress( qint64, qint64 ) ), this, SLOT( replyProgress( qint64, qint64 ) ) );

    QEventLoop loop;
    connect( this, SIGNAL( downloadFinished() ), &loop, SLOT( quit() ) );
    loop.exec( QEventLoop::ExcludeUserInputEvents );

    return mErrorMessage.isEmpty();
}