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

Smith, Michael ERDC-RDE-CRREL-NH Michael.Smith at erdc.dren.mil
Wed Aug 20 10:49:27 PDT 2014


I should be back to test against some Arc WMS instances

On 8/20/14,  1:07 PM, "Jeff McKenna" <jmckenna at gatewaygeomatics.com> wrote:

>I agree it's a change that should slip in now for 7.0, but I hope those
>with later ArcServer versions can test it in the beta (or we have one
>volunteer to let us use their Arc WMS instance for testing).
>
>-jeff
>
>
>
>On 2014-08-20 1:52 PM, Lime, Steve D (MNIT) 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 <mailto:pmoen at nd.gov>
>> 701-328-2434
>>
>> *From: *<Lime>, "Steve D (MNIT)" <Steve.Lime at state.mn.us
>> <mailto:Steve.Lime at state.mn.us>>
>> *Date: *Wednesday, August 20, 2014 at 12:41 AM
>> *To: *Paul Moen <pmoen at nd.gov <mailto:pmoen at nd.gov>>,
>> "mapserver-users at lists.osgeo.org
>> <mailto:mapserver-users at lists.osgeo.org>"
>> <mapserver-users at lists.osgeo.org
>><mailto: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)
>> <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
>> <mailto:mapserver-users-bounces at lists.osgeo.org>
>> [mapserver-users-bounces at lists.osgeo.org
>> <mailto:mapserver-users-bounces at lists.osgeo.org>] on behalf of Moen,
>> Paul T. [pmoen at nd.gov <mailto:pmoen at nd.gov>]
>> *Sent:* Tuesday, August 19, 2014 4:56 PM
>> *To:* mapserver-users at lists.osgeo.org
>> <mailto: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/WMSServer?
>>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/WMSServer?
>>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.15992838,5
>>96656.333359479,2119730.85012732,789150.692893686&TRANSPARENT=TRUE&EXCEPT
>>IONS=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/WMSServer?
>>LAYERS=Topomap%20DRG%20250k&REQUEST=map&WMTVER=1.0.0&SERVICE=WMS&FORMAT=i
>>mage/png&STYLES=&HEIGHT=1146&SRS=EPSG:2266&WIDTH=1271&BBOX=1906240.159928
>>38,596656.333359479,2119730.85012732,789150.692893686&TRANSPARENT=TRUE&EX
>>CEPTIONS=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 <mailto: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