code: def _fetch_features(self):
          
          if self.feature_offset is None:
              return
  
          main_url = '{}{}/{}?'.format(self.base_url, ServiceType.WFS.value, self.instance_id)
  
          params = {'SERVICE': ServiceType.WFS.value,
                    'REQUEST': 'GetFeature',
                    'TYPENAMES': DataSource.get_wfs_typename(self.data_source),
                    'BBOX': str(self.bbox.reverse()) if self.bbox.crs is CRS.WGS84 else str(self.bbox),
                    'OUTPUTFORMAT': MimeType.get_string(MimeType.JSON),
                    'SRSNAME': CRS.ogc_string(self.bbox.crs),
                    'TIME': '{}/{}'.format(self.time_interval[0], self.time_interval[1]),
                    'MAXCC': 100.0 * self.maxcc,
                    'MAXFEATURES': SHConfig().max_wfs_records_per_query,
                    'FEATURE_OFFSET': self.feature_offset}
  
          url = main_url + urlencode(params)
          LOGGER.debug("URL=%s", url)
          response = get_json(url)
  
          is_sentinel1 = self.data_source.is_sentinel1()
          for tile_info in response["features"]:
              if not is_sentinel1 or self._sentinel1_product_check(tile_info['properties']['id'], self.data_source):
                  self.tile_list.append(tile_info)
  
          if len(response["features"]) < SHConfig().max_wfs_records_per_query:
              self.feature_offset = None
          else:
              self.feature_offset += SHConfig().max_wfs_records_per_query
docs: Collects data from WFS service
  
          :return: dictionary containing info about product tiles
          :rtype: dict