1. import re
  2. def clean_cookies(cookie_string):
  3. """
  4. Cleans a cookie string for data migration. Handles various edge cases.
  5. Args:
  6. cookie_string: The raw cookie string to clean.
  7. Returns:
  8. A list of cleaned cookie dictionaries. Returns an empty list if input is invalid.
  9. """
  10. if not isinstance(cookie_string, str):
  11. return [] # Handle invalid input
  12. cleaned_cookies = []
  13. cookie_list = cookie_string.split(';')
  14. for cookie in cookie_list:
  15. cookie = cookie.strip() # Remove leading/trailing whitespace
  16. if not cookie:
  17. continue # Skip empty cookies
  18. try:
  19. name, value = cookie.split('=', 1) # Split into name and value
  20. name = name.strip().strip('"')
  21. value = value.strip().strip('"')
  22. # Handle potential issues with value containing '='
  23. value = re.sub(r'=', '', value)
  24. cleaned_cookies.append({
  25. 'name': name,
  26. 'value': value
  27. })
  28. except ValueError:
  29. # Handle cookies without '='
  30. print(f"Warning: Invalid cookie format: {cookie}. Skipping.")
  31. continue
  32. except Exception as e:
  33. print(f"Error processing cookie: {cookie}. Skipping. Error: {e}")
  34. continue
  35. return cleaned_cookies
  36. if __name__ == '__main__':
  37. # Example Usage
  38. cookie_data = """
  39. "name=value1"; name2=value2; name3=value3=with=equals;
  40. "name with spaces"=value with spaces;
  41. invalid cookie;
  42. """
  43. cleaned_data = clean_cookies(cookie_data)
  44. print(cleaned_data)

Add your comment