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

Lime, Steve D (MNIT) Steve.Lime at state.mn.us
Wed Aug 20 09:57:18 PDT 2014


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