[mapserver-dev] FW: [mapserver-users] WMS request fails when spaces are encoded as plus symbol in query part of URL

thomas bonfort thomas.bonfort at gmail.com
Wed Aug 20 10:03:14 PDT 2014


correct, the space will be handled later on with the supplied patch. I
should have looked at the code, from the patch it seemed we would just
be leaving the space as-is.
Fine for 7.0 by me.

--
thomas

On 20 August 2014 18:57, Lime, Steve D (MNIT) <Steve.Lime at state.mn.us> wrote:
> Isn't that the result of removing the test or do we need to update msEncodeChar() as well (not code I'm comfortable in)? Could just leave the test and explicitly set %20.
>
> -----Original Message-----
> From: thomas bonfort [mailto:thomas.bonfort at gmail.com]
> Sent: Wednesday, August 20, 2014 11:54 AM
> To: Lime, Steve D (MNIT)
> Cc: mapserver-dev at lists.osgeo.org
> Subject: Re: [mapserver-dev] FW: [mapserver-users] WMS request fails when spaces are encoded as plus symbol in query part of URL
>
> Shouldn't we encode as %20 instead of leaving it as a space?
>
> On 20 August 2014 18:52, Lime, Steve D (MNIT) <Steve.Lime at state.mn.us> wrote:
>> Devs: Is this a change that we should make for 7.0? Seems reasonable
>> but I’m not sure what the side effects might be.
>>
>>
>>
>> Steve
>>
>>
>>
>> From: Moen, Paul T. [mailto:pmoen at nd.gov]
>> Sent: Wednesday, August 20, 2014 9:44 AM
>> To: Lime, Steve D (MNIT); mapserver-users at lists.osgeo.org
>> Subject: Re: [mapserver-users] WMS request fails when spaces are
>> encoded as plus symbol in query part of URL
>>
>>
>>
>> Steve,
>>
>>
>>
>> You are right about the outcome of 1 and 2.  1 encodes the % and 2
>> throws the following error.
>>
>>
>>
>> msBuildWMSLayerURLBase(): One of wms_onlineresource,
>> wms_server_version, wms_name metadata is missing in layer USGS DRG
>> 250k Topo Maps.  Please either provide a valid CONNECTION URL, or
>> provide those values in the layer's metadata.\n\n
>>
>>
>>
>> I found the function as you said and
>>
>> I removed the
>>
>>
>>
>>  if (*i == ' ')
>>
>>       *j = '+';
>>
>>     else
>>
>> from the function then recompiled.
>>
>>
>>
>> char *msEncodeUrlExcept(const char *data, const char except)
>>
>> {
>>
>>   char *hex = "0123456789ABCDEF";
>>
>>   const char *i;
>>
>>   char  *j, *code;
>>
>>   int   inc;
>>
>>   unsigned char ch;
>>
>>
>>
>>   for (inc=0, i=data; *i!='\0'; i++)
>>
>>     if (msEncodeChar(*i))
>>
>>       inc += 2;
>>
>>
>>
>>   code = (char*)msSmallMalloc(strlen(data)+inc+1);
>>
>>
>>
>>   for (j=code, i=data; *i!='\0'; i++, j++) {
>>
>>     if ( except != '\0' && *i == except ) {
>>
>>       *j = except;
>>
>>     } else if (msEncodeChar(*i)) {
>>
>>       ch = *i;
>>
>>       *j++ = '%';
>>
>>       *j++ = hex[ch/16];
>>
>>       *j   = hex[ch%16];
>>
>>     } else
>>
>>       *j = *i;
>>
>>   }
>>
>>   *j = '\0';
>>
>>
>>
>>   return code;
>>
>> }
>>
>>
>>
>> Everything works again after a mapserver recompile, install and
>> finally a restart of apache.  Thanks so much for the path to the solution.
>>
>>
>>
>> Paul Moen
>> pmoen at nd.gov
>> 701-328-2434
>>
>>
>>
>>
>>
>> From: <Lime>, "Steve D (MNIT)" <Steve.Lime at state.mn.us>
>> Date: Wednesday, August 20, 2014 at 12:41 AM
>> To: Paul Moen <pmoen at nd.gov>, "mapserver-users at lists.osgeo.org"
>> <mapserver-users at lists.osgeo.org>
>> Subject: RE: [mapserver-users] WMS request fails when spaces are
>> encoded as plus symbol in query part of URL
>>
>>
>>
>> Hmmm... Nice backwards compatibility ESRI. The +'s seem to still be
>> quite legal (http://tools.ietf.org/html/rfc3986 and other references)
>> in the query string (but not the path). I don't have access to test
>> and I'm guessing these ideas won't work but they might be worth a quick try:
>>
>>
>>
>>   1) Try encoding the wms_name in the metadata: "wms_name"
>> "Topomap%20DRG%20250k"
>>
>>   2) Don't set the wms_name in the metadata but add it to the connection:
>> CONNECTION
>> "http://ndgishub.nd.gov/arcgis/services/All_Elevation/MapServer/WMSServer?LAYERS=Topomap%20DRG%20250k&"
>>
>>
>>
>> I'm betting MapServer will encode the %'s in 1 and throw an error in 2.
>> Otherwise you could hack the MapServer source. Function is called
>> msEncodeUrlExcept() in mapstring.c you can see the section to change
>> starting at line 1138 in git master
>> (https://github.com/mapserver/mapserver/blob/master/mapstring.c)
>>
>>
>>
>> Maybe it's worth making this change as part of 7.0?
>>
>>
>>
>> Steve
>>
>>
>>
>>
>>
>> ________________________________
>>
>> From: mapserver-users-bounces at lists.osgeo.org
>> [mapserver-users-bounces at lists.osgeo.org] on behalf of Moen, Paul T.
>> [pmoen at nd.gov]
>> Sent: Tuesday, August 19, 2014 4:56 PM
>> To: mapserver-users at lists.osgeo.org
>> Subject: [mapserver-users] WMS request fails when spaces are encoded
>> as plus symbol in query part of URL
>>
>> Hi all,
>>
>>
>>
>> We are consuming WMS services hosted by ESRI ArcGIS Server 10.0.  The
>> server was upgraded to ArcGIS Server 10.2.2 and we no longer can
>> access layer names with spaces.
>>
>>
>>
>> This is the server’s capabilities.
>>
>> http://ndgishub.nd.gov/arcgis/services/All_Elevation/MapServer/WMSServ
>> er?request=GetCapabilities&service=WMS
>>
>>
>>
>> This is the layer I am using.
>>
>>
>>
>> LAYER
>>
>> # DEBUG 5
>>
>> CONNECTIONTYPE WMS
>>
>> CONNECTION
>> "http://ndgishub.nd.gov/arcgis/services/All_Elevation/MapServer/WMSServer?"
>>
>> METADATA
>>
>> "wms_name" "Topomap DRG 250k"
>>
>> "wms_format" "image/png"
>>
>> "wms_server_version" "1.1.1"
>>
>> "wms_srs" "EPSG:2266"
>>
>> END
>>
>> TYPE RASTER
>>
>> STATUS OFF
>>
>> NAME "USGS DRG 250k Topo Maps"
>>
>> END
>>
>>
>>
>> Mapserver encodes this request as follows.  Notice that the layer
>> name, which is ‘Topomap DRG 250k’, is encoded with the spaces becoming the ‘+’
>> character.
>>
>>
>>
>> http://ndgishub.nd.gov/arcgis/services/All_Elevation/MapServer/WMSServ
>> er?LAYERS=Topomap+DRG+250k&REQUEST=map&WMTVER=1.0.0&SERVICE=WMS&FORMAT
>> =image/png&STYLES=&HEIGHT=1146&SRS=EPSG:2266&WIDTH=1271&BBOX=1906240.1
>> 5992838,596656.333359479,2119730.85012732,789150.692893686&TRANSPARENT
>> =TRUE&EXCEPTIONS=INIMAGE
>>
>>
>>
>> This returns the error in an image that says “Parameter ‘layers’
>> contains unacceptable layer names.”
>>
>>
>>
>> When I replace the + in the layer name with %20,
>> LAYERS=Topomap+DRG+250k become LAYERS=Topomap%20DRG%20250k and the request becomes the following.
>>
>>
>>
>> http://ndgishub.nd.gov/arcgis/services/All_Elevation/MapServer/WMSServ
>> er?LAYERS=Topomap%20DRG%20250k&REQUEST=map&WMTVER=1.0.0&SERVICE=WMS&FO
>> RMAT=image/png&STYLES=&HEIGHT=1146&SRS=EPSG:2266&WIDTH=1271&BBOX=19062
>> 40.15992838,596656.333359479,2119730.85012732,789150.692893686&TRANSPA
>> RENT=TRUE&EXCEPTIONS=INIMAGE
>>
>>
>>
>> That request works.  Obviously, ESRI is no longer decoding + as a
>> space and therefore does not recognize the layer name with spaces.
>>
>>
>>
>> Is there any way I can have mapserver encode all characters using
>> percent-encoding, or at least encode spaces as %20 instead of a + character.
>>
>>
>>
>> Thanks,
>>
>>
>>
>> Paul Moen
>> pmoen at nd.gov
>> 701-328-2434
>>
>>
>>
>> _______________________________________________
>> mapserver-dev mailing list
>> mapserver-dev at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/mapserver-dev


More information about the mapserver-dev mailing list