diff --git a/tests/regressiontests/forms/tests/error_messages.py b/tests/regressiontests/forms/tests/error_messages.py
index a9f4f37..3290d85 100644
--- a/tests/regressiontests/forms/tests/error_messages.py
+++ b/tests/regressiontests/forms/tests/error_messages.py
@@ -4,6 +4,7 @@ from django.forms import *
 from django.test import TestCase
 from django.utils.safestring import mark_safe
 from django.utils import unittest
+from regressiontests.forms.tests.fields import verify_exists_urls
 
 class AssertFormErrorsMixin(object):
     def assertFormErrors(self, expected, the_callable, *args, **kwargs):
@@ -139,6 +140,7 @@ class FormsErrorMessagesTestCase(unittest.TestCase, AssertFormErrorsMixin):
         self.assertFormErrors([u'EMPTY FILE'], f.clean, SimpleUploadedFile('name', None))
         self.assertFormErrors([u'EMPTY FILE'], f.clean, SimpleUploadedFile('name', ''))
 
+    @verify_exists_urls()
     def test_urlfield(self):
         e = {
             'required': 'REQUIRED',
diff --git a/tests/regressiontests/forms/tests/fields.py b/tests/regressiontests/forms/tests/fields.py
index 2303b4e..58c2b70 100644
--- a/tests/regressiontests/forms/tests/fields.py
+++ b/tests/regressiontests/forms/tests/fields.py
@@ -30,6 +30,7 @@ import re
 import os
 import urllib2
 from decimal import Decimal
+from functools import wraps
 
 from django.core.files.uploadedfile import SimpleUploadedFile
 from django.forms import *
@@ -48,6 +49,28 @@ def fix_os_paths(x):
         return x
 
 
+def verify_exists_urls(existing_urls=()):
+    def decorator(func):
+        @wraps(func)
+        def wrapper(*args, **kwargs):
+            from django.core import validators
+            # patch urllib2
+            original_urlopen = validators.urllib2.urlopen
+            def urlopen(req):
+                url = req.get_full_url()
+                if url in existing_urls:
+                    return True
+                raise Exception()
+            try:
+                urllib2.urlopen = urlopen
+                func(*args, **kwargs)
+            finally:
+                # unpatch urllib2
+                validators.urllib2.urlopen = original_urlopen
+        return wrapper
+    return decorator
+
+
 class FieldsTests(TestCase):
 
     def assertRaisesErrorWithMessage(self, error, message, callable, *args, **kwargs):
@@ -592,9 +615,10 @@ class FieldsTests(TestCase):
         self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://example.')
         self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://.com')
 
+    @verify_exists_urls(('http://www.google.com/',))
     def test_urlfield_3(self):
         f = URLField(verify_exists=True)
-        self.assertEqual(u'http://www.google.com/', f.clean('http://www.google.com')) # This will fail if there's no Internet connection
+        self.assertEqual(u'http://www.google.com/', f.clean('http://www.google.com'))
         self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://example')
         self.assertRaises(ValidationError, f.clean, 'http://www.broken.djangoproject.com') # bad domain
         self.assertRaises(ValidationError, f.clean, 'http://qa-dev.w3.org/link-testsuite/http.php?code=405') # Method not allowed
@@ -608,10 +632,11 @@ class FieldsTests(TestCase):
         except ValidationError, e:
             self.assertEqual("[u'This URL appears to be a broken link.']", str(e))
 
+    @verify_exists_urls(('http://www.google.com/',))
     def test_urlfield_4(self):
         f = URLField(verify_exists=True, required=False)
         self.assertEqual(u'', f.clean(''))
-        self.assertEqual(u'http://www.google.com/', f.clean('http://www.google.com')) # This will fail if there's no Internet connection
+        self.assertEqual(u'http://www.google.com/', f.clean('http://www.google.com'))
 
     def test_urlfield_5(self):
         f = URLField(min_length=15, max_length=20)
@@ -660,17 +685,11 @@ class FieldsTests(TestCase):
         except ValidationError, e:
             self.assertEqual("[u'This URL appears to be a broken link.']", str(e))
 
+    @verify_exists_urls(('http://xn--tr-xka.djangoproject.com/',))
     def test_urlfield_10(self):
-        # UTF-8 char in path, enclosed by a monkey-patch to make sure
-        # the encoding is passed to urllib2.urlopen
         f = URLField(verify_exists=True)
-        try:
-            _orig_urlopen = urllib2.urlopen
-            urllib2.urlopen = lambda req: True
-            url = u'http://t\xfcr.djangoproject.com/'
-            self.assertEqual(url, f.clean(url))
-        finally:
-            urllib2.urlopen = _orig_urlopen
+        url = u'http://t\xfcr.djangoproject.com/'
+        self.assertEqual(url, f.clean(url))
 
     # BooleanField ################################################################
 
