diff -aur gimp/plug-ins/file-uri/uri-backend-libcurl.c gimp.patched/plug-ins/file-uri/uri-backend-libcurl.c
--- gimp/plug-ins/file-uri/uri-backend-libcurl.c	2011-07-05 15:37:10.000000000 +0200
+++ gimp.patched/plug-ins/file-uri/uri-backend-libcurl.c	2011-07-05 15:59:06.000000000 +0200
@@ -23,7 +23,6 @@
 #include <errno.h>
 
 #include <curl/curl.h>
-#include <curl/types.h>
 #include <curl/easy.h>
 
 #include <glib/gstdio.h>
@@ -62,7 +61,7 @@
 
   vinfo = curl_version_info (CURLVERSION_NOW);
 
-  protocols = g_string_new ("http:,ftp:");
+  protocols = g_string_new ("http:,ftp:,gopher:");
 
   if (vinfo->features & CURL_VERSION_SSL)
     {
@@ -153,6 +152,11 @@
   CURL      *curl_handle;
   CURLcode   result;
   glong      response_code;
+  gchar     *eff_url   = NULL;
+  gchar     *proto     = NULL;
+  gboolean   is_http   = FALSE;
+  gboolean   is_ftp    = FALSE;
+  gboolean   is_gopher = FALSE;
 
   gimp_progress_init (_("Connecting to server"));
 
@@ -194,13 +198,40 @@
 
   curl_easy_getinfo (curl_handle, CURLINFO_RESPONSE_CODE, &response_code);
 
-  if (response_code != 200)
+  /* protocol could be not specified in provided uri
+     get complete url guessed by curl */
+  curl_easy_getinfo (curl_handle, CURLINFO_EFFECTIVE_URL, &eff_url);
+
+  /* detect uri protocol */
+  if (strcasestr (eff_url, "http://"))
+    {
+      is_http = TRUE;
+      proto = "HTTP";
+    }
+  else
+  if (strcasestr (eff_url, "ftp://"))
+    {
+      is_ftp = TRUE;
+      proto = "FTP";
+    }
+  else
+  if (strcasestr (eff_url ,"gopher://"))
+    {
+      is_gopher = TRUE;
+      proto = "GOPHER";
+    }
+  else
+    {
+      proto = "UNKNOWN";
+    }
+
+  if ((is_http && response_code != 200) || (is_ftp && response_code != 226) || (is_gopher && response_code != 0))
     {
       fclose (out_file);
       g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
-                   _("Opening '%s' for reading resulted in HTTP "
+                   _("Opening '%s' for reading resulted in %s "
                      "response code: %ld"),
-                   uri, response_code);
+                   uri, proto, response_code);
       curl_easy_cleanup (curl_handle);
       return FALSE;
     }
