26 #include <QDomDocument>    31   : mExceptionRaised( false )
    33   , mResponse( response )
    44   return mExceptionRaised;
    64   return mResponse.
header( name );
    84   return mRequest.
header( name );
   101   mResponse.
write( body );
   111   return mResponse.
data();
   116   return mRequest.
data();
   121   return mRequest.
url().toString();
   143   mExceptionRaised = 
true;
   144   mResponse.
write( ex );
   147 void QgsRequestHandler::setupParameters()
   152   QString infoFormat = parameters.value( QStringLiteral( 
"INFO_FORMAT" ) );
   153   if ( !infoFormat.isEmpty() )
   155     mFormat = infoFormat;
   159     mFormatString = parameters.value( QStringLiteral( 
"FORMAT" ) );
   160     QString formatString = mFormatString;
   161     if ( !formatString.isEmpty() )
   166       if ( formatString.contains( QLatin1String( 
"image/png" ), Qt::CaseInsensitive ) || formatString.compare( QLatin1String( 
"png" ), Qt::CaseInsensitive ) == 0 )
   168         formatString = QStringLiteral( 
"PNG" );
   170       else if ( formatString.contains( QLatin1String( 
"image/jpeg" ), Qt::CaseInsensitive ) || formatString.contains( QLatin1String( 
"image/jpg" ), Qt::CaseInsensitive )
   171                 || formatString.compare( QLatin1String( 
"jpg" ), Qt::CaseInsensitive ) == 0 )
   173         formatString = QStringLiteral( 
"JPG" );
   175       else if ( formatString.compare( QLatin1String( 
"svg" ), Qt::CaseInsensitive ) == 0 )
   177         formatString = QStringLiteral( 
"SVG" );
   179       else if ( formatString.contains( QLatin1String( 
"pdf" ), Qt::CaseInsensitive ) )
   181         formatString = QStringLiteral( 
"PDF" );
   184       mFormat = formatString;
   196     if ( mRequest.
header( QStringLiteral( 
"Content-Type" ) ).contains( QStringLiteral( 
"json" ) ) )
   202       QString inputString( mRequest.
data() );
   207       if ( !doc.setContent( inputString, 
true, &errorMsg, &line, &column ) )
   210         QgsMessageLog::logMessage( QStringLiteral( 
"Warning: error parsing post data as XML: at line %1, column %2: %3. Assuming urlencoded query string sent in the post body." )
   211                                    .arg( line ).arg( column ).arg( errorMsg ) );
   215         typedef QPair<QString, QString> pair_t;
   216         QUrlQuery query( inputString );
   217         const QList<pair_t> items = query.queryItems();
   218         for ( 
const pair_t &pair : items )
   221           const QString key = QUrl::fromPercentEncoding( QString( pair.first ).replace( 
'+', 
' ' ).toUtf8() );
   222           const QString value = QUrl::fromPercentEncoding( QString( pair.second ).replace( 
'+', 
' ' ).toUtf8() );
   233         QDomElement docElem = doc.documentElement();
   235         mRequest.
setParameter( QStringLiteral( 
"REQUEST" ), docElem.tagName() );
   238         QDomNamedNodeMap map = docElem.attributes();
   239         for ( 
int i = 0 ; i < map.length() ; ++i )
   241           if ( map.item( i ).isNull() )
   244           const QDomNode attrNode = map.item( i );
   245           const QDomAttr attr = attrNode.toAttr();
   249           const QString attrName = attr.name();
   250           if ( attrName.startsWith( 
"xmlns" ) || attrName.startsWith( 
"xsi:" ) )
   253           mRequest.
setParameter( attrName.toUpper(), attr.value() );
   255         mRequest.
setParameter( QStringLiteral( 
"REQUEST_BODY" ), inputString.replace( 
'+', QStringLiteral( 
"%2B" ) ) );
   267   if ( !( key.isEmpty() || value.isEmpty() ) )
   271     if ( key.compare( QLatin1String( 
"MAP" ), Qt::CaseInsensitive ) == 0 )
   273       QgsMessageLog::logMessage( QStringLiteral( 
"Changing the 'MAP' parameter will have no effect on config path: use QgsSerververInterface::setConfigFilePath instead" ),
 void clearBody()
Clear response buffer. 
 
virtual void setHeader(const QString &key, const QString &value)=0
Set Header entry Add Header entry to the response Note that it is usually an error to set Header afte...
 
virtual void truncate()=0
Truncate data. 
 
QString requestHeader(const QString &name) const
Retrieve request header value. 
 
void setParameter(const QString &key, const QString &value)
Set a parameter. 
 
void setParameter(const QString &key, const QString &value)
Sets a request parameter. 
 
QgsRequestHandler(QgsServerRequest &request, QgsServerResponse &response)
Constructor. 
 
QString header(const QString &name) const
Returns the header value. 
 
QString parameter(const QString &key, const QString &defaultValue=QString()) const
Gets a parameter value. 
 
QString parameter(const QString &key) const
Returns a request parameter. 
 
QMap< QString, QString > responseHeaders() const
Returns the response headers. 
 
virtual int statusCode() const =0
Returns the http status code. 
 
QByteArray data() const
Returns the request POST data (can be null) 
 
virtual void clear()=0
Reset all headers and content for this response. 
 
QMap< QString, QString > requestHeaders() const
Returns the the Request headers. 
 
virtual void write(const QString &data)
Write string This is a convenient method that will write directly to the underlying I/O device...
 
virtual QByteArray data() const
Returns post/put data Check for QByteArray::isNull() to check if data is available. 
 
bool headersSent() const
Returns true if the HTTP headers were already sent to the client. 
 
virtual void removeHeader(const QString &key)=0
Clear header Undo a previous 'setHeader' call. 
 
QByteArray body() const
Returns the response body data. 
 
void sendResponse()
Send out HTTP headers and flush output buffer. 
 
void setStatusCode(int code)
Sets response http status code. 
 
virtual void setStatusCode(int code)=0
Set the http status code. 
 
void setResponseHeader(const QString &name, const QString &value)
Sets an HTTP response header. 
 
QMap< QString, QString > headers() const
Returns the header map. 
 
QgsServerRequest::Parameters parameters() const
Returns a map of query parameters with keys converted to uppercase. 
 
static void logMessage(const QString &message, const QString &tag=QString(), Qgis::MessageLevel level=Qgis::Warning, bool notifyUser=true)
Adds a message to the log instance (and creates it if necessary). 
 
QString responseHeader(const QString &name) const
Retrieve response header value. 
 
void setServiceException(const QgsServerException &ex)
Allow plugins to return a QgsMapServiceException. 
 
int statusCode() const
Returns the response http status code. 
 
void appendBody(const QByteArray &body)
Sets the info format string such as "text/xml". 
 
Exception base class for server exceptions. 
 
virtual QString header(const QString &key) const =0
Returns the header value. 
 
void setHeader(const QString &name, const QString &value)
Set an header. 
 
virtual QByteArray data() const =0
Gets the data written so far. 
 
QgsServerRequest Class defining request interface passed to services QgsService::executeRequest() met...
 
void parseInput()
Parses the input and creates a request neutral Parameter/Value map. 
 
void setRequestHeader(const QString &name, const QString &value)
Sets an HTTP request header. 
 
void removeHeader(const QString &name)
Remove an header. 
 
void removeParameter(const QString &key)
Remove a request parameter. 
 
void removeParameter(const QString &key)
Remove a parameter. 
 
virtual QMap< QString, QString > headers() const =0
Returns the header value. 
 
QgsServerRequest::Method method() const
 
bool exceptionRaised() const
Pointer to last raised exception. 
 
virtual bool headersSent() const =0
Returns true if the headers have already been sent. 
 
QgsServerResponse Class defining response interface passed to services QgsService::executeRequest() m...
 
void removeRequestHeader(const QString &name)
Remove an HTTP request header. 
 
QMap< QString, QString > parameterMap() const
Returns the parsed parameters as a key-value pair, to modify a parameter setParameter( const QString ...
 
void clear()
Clears the response body and headers. 
 
void removeResponseHeader(const QString &name)
Remove an HTTP response header. 
 
QMap< QString, QString > Parameters
 
QString url() const
Returns the request url. 
 
virtual void flush() SIP_THROW(QgsServerException)
Flushes the current output buffer to the network.