<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def parse_request(self, header_data, ignore_bad_cookies=False):
 """Parse 'Cookie' header data into Cookie objects, and add them to this Cookies object. :arg header_data: string containing only 'Cookie:' request headers or header values (as in CGI/WSGI HTTP_COOKIE); if more than one, they must be separated by CRLF (\\r\\n). :arg ignore_bad_cookies: if set, will log each syntactically invalid cookie (at the granularity of semicolon-delimited blocks) rather than raising an exception at the first bad cookie. :returns: a Cookies instance containing Cookie objects parsed from header_data. .. note:: If you want to parse 'Set-Cookie:' response headers, please use parse_response instead. parse_request will happily turn 'expires=frob' into a separate cookie without complaining, according to the grammar. """

        cookies_dict = _parse_request(
            header_data, ignore_bad_cookies=ignore_bad_cookies)
        cookie_objects = []
        for name, values in cookies_dict.items():
            for value in values:
                # Use from_dict to check name and parse value
                cookie_dict = {'name': name, 'value': value}
                try:
                    cookie = self.cookie_class.from_dict(cookie_dict)
                except InvalidCookieError:
                    if not ignore_bad_cookies:
                        raise
                else:
                    cookie_objects.append(cookie)
        try:
            self.add(*cookie_objects)
        except InvalidCookieError:
            if not ignore_bad_cookies:
                raise
            _report_invalid_cookie(header_data)
        return self