NickeManarin/ScreenToGif · error · WebException

Empty response from server when getting language codes path

Error message

Empty response from server when getting language codes path

What it means

Thrown by GetLanguageCodesPathAsync when response.GetResponseStream() returns null while fetching the datapackage.json from datahub.io. This is the same null-stream condition as error [2] but on the initial datapackage request rather than the language-codes JSON request.

Source

Thrown at Other/Translator/TranslatorWindow.xaml.cs:736

                var json = await Task<XElement>.Factory.StartNew(() => XElement.Load(jsonReader));
                var languages = json.Elements();

                return await Task.Factory.StartNew(() => languages.Where(x => x.XPathSelectElement("defs").Value != "0").Select(x => x.XPathSelectElement("lang").Value));
            }
        }
    }

    private async Task<string> GetLanguageCodesPathAsync()
    {
        var request = (HttpWebRequest)WebRequest.Create("https://datahub.io/core/language-codes/datapackage.json");
        request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393";

        var response = (HttpWebResponse)await request.GetResponseAsync();

        using (var resultStream = response.GetResponseStream())
        {
            if (resultStream == null)
                throw new WebException("Empty response from server when getting language codes path");

            using (var reader = new StreamReader(resultStream))
            {
                var result = await reader.ReadToEndAsync();

                var jsonReader = JsonReaderWriterFactory.CreateJsonReader(Encoding.UTF8.GetBytes(result),
                    new System.Xml.XmlDictionaryReaderQuotas());

                var json = await Task<XElement>.Factory.StartNew(() => XElement.Load(jsonReader));

                return await Task.Factory.StartNew(() => json.XPathSelectElement("resources").Elements().First(x => x.XPathSelectElement("name").Value == "ietf-language-tags_json").XPathSelectElement("path").Value);
            }
        }
    }

    #endregion
}

View on GitHub (pinned to a4d0a67c21)

Solutions

  1. Retry the request with KeepAlive disabled.
  2. Verify the URL https://datahub.io/core/language-codes/datapackage.json is accessible from a browser or curl.
  3. Cache the datapackage.json path locally so it does not need to be fetched every time.
  4. Fall back to the hardcoded language codes list in the TranslatorWindow class.

Example fix

// before
var request = (HttpWebRequest)WebRequest.Create("https://datahub.io/core/language-codes/datapackage.json");
var response = (HttpWebResponse)await request.GetResponseAsync();
using (var resultStream = response.GetResponseStream())
{
    if (resultStream == null)
        throw new WebException("Empty response from server when getting language codes path");

// after: set KeepAlive = false and add retry logic
var request = (HttpWebRequest)WebRequest.Create("https://datahub.io/core/language-codes/datapackage.json");
request.KeepAlive = false;
request.Timeout = 15000;
Defensive patterns

Strategy: fallback

Validate before calling

// Check connectivity before making the API call
if (!await IsHostReachable("datahub.io"))
    return string.Empty; // will trigger the hardcoded fallback
var request = (HttpWebRequest)WebRequest.Create("https://datahub.io/core/language-codes/datapackage.json");
request.KeepAlive = false;

Try / catch

try
{
    return await GetLanguageCodesPathAsync();
}
catch (WebException)
{
    return string.Empty; // triggers fallback to hardcoded language list in caller
}

Prevention

When it happens

Trigger: HttpWebResponse.GetResponseStream() returns null on the GET to https://datahub.io/core/language-codes/datapackage.json. Server accepted the connection but sent no body stream.

Common situations: Datahub.io server instability or maintenance. Proxy or firewall interfering with the response body. DNS resolves but connection drops before body transmission. Rate limiting from datahub.io that returns headers without a body.

Related errors


AI-assisted analysis of NickeManarin/ScreenToGif@a4d0a67c21 (2026-08-13). Data as JSON: /api/errors/fcd3c7a4edab47e4. Report an issue: GitHub.