You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#调用DeepL API遭遇HTTP 403 Forbidden错误求助

解决DeepL API请求403 Forbidden错误的方案

核心错误原因分析

  1. 请求方式不符合要求:DeepL翻译API仅接受POST请求,当前使用的GET请求会被服务器拒绝,返回403。
  2. 参数名错误:使用了target_langs参数,但DeepL API的正确参数名是target_lang,且单次请求仅支持一个目标语言。
  3. API密钥格式问题:免费版DeepL API密钥必须以:fx结尾,若密钥缺少该后缀,会导致认证失败。
  4. URL未编码:直接拼接文本到URL中,若包含特殊字符会破坏请求格式,进一步触发服务器拦截。

修复步骤与代码修改

1. 确认API密钥格式

确保免费版密钥格式为xxxxxx:fx,例如f0798faa-xxxx-xxxx-xxxx-xxxxxxxx:fx。

2. 改用POST请求并修正参数

将原GET请求改为POST,使用表单格式传递参数,同时对每个选中的目标语言单独发起请求(因DeepL不支持单次请求多目标语言)。另外,使用async/await优化异步请求逻辑,避免死锁。

修改后的BtnTranslate_Click方法代码:

private async void BtnTranslate_Click(object sender, RoutedEventArgs e)
{
    string text = txtInput.Text;
    if (string.IsNullOrWhiteSpace(text))
    {
        MessageBox.Show("请输入要翻译的文本", "提示", MessageBoxButton.OK, MessageBoxImage.Information);
        return;
    }

    List<string> targetLanguages = new List<string>();
    if (chkEnglish.IsChecked.Value) targetLanguages.Add("EN-GB");
    if (chkCzech.IsChecked.Value) targetLanguages.Add("CS");
    if (chkSpanish.IsChecked.Value) targetLanguages.Add("ES");
    if (chkPortuguese.IsChecked.Value) targetLanguages.Add("PT-BR");
    if (chkFrench.IsChecked.Value) targetLanguages.Add("FR");

    if (!targetLanguages.Any())
    {
        MessageBox.Show("请至少选择一个目标语言", "提示", MessageBoxButton.OK, MessageBoxImage.Information);
        return;
    }

    StringBuilder sbOutput = new StringBuilder();
    sbOutput.AppendLine("{i18n de}").AppendLine(text).AppendLine("{/i18n}");

    using (HttpClient client = new HttpClient())
    {
        client.DefaultRequestHeaders.Add("Authorization", $"DeepL-Auth-Key {API_KEY}");

        foreach (var targetLang in targetLanguages)
        {
            try
            {
                var formData = new Dictionary<string, string>
                {
                    {"text", text},
                    {"source_lang", "DE"},
                    {"target_lang", targetLang}
                };

                var response = await client.PostAsync(API_URL, new FormUrlEncodedContent(formData));

                if (response.IsSuccessStatusCode)
                {
                    string jsonResponse = await response.Content.ReadAsStringAsync();
                    JObject json = JObject.Parse(jsonResponse);
                    var translation = json["translations"][0]["text"].ToString();
                    sbOutput.AppendLine($"{{i18n {targetLang.ToLower()}}}")
                            .AppendLine(translation)
                            .AppendLine("{/i18n}");
                }
                else
                {
                    string errorContent = await response.Content.ReadAsStringAsync();
                    MessageBox.Show($"翻译{targetLang}时出错: {response.StatusCode}\n错误详情: {errorContent}", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"翻译{targetLang}时发生异常: {ex.Message}", "异常", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        txtOutput.Text = sbOutput.ToString();
    }
}

3. 其他注意事项

  • 确保API密钥未泄露,且账户未超出免费版调用额度。
  • 若使用付费版DeepL API,需将API_URL改为https://api.deepl.com/v2/translate,密钥无需:fx后缀。

内容的提问来源于stack exchange,提问作者MKa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 06:24:51