从https请求translate.google.com没有收到翻译后的文本

现在我尝试通过Roblox Studio使用Https服务来做一个翻译器,通过发送一个请求到translate.google.com链接,但我得到的任何返回结果都没有给我翻译后的文本。

我把收到的内容放在一个谷歌文档中,并尝试通过按下ctrl + f来查找,但没有任何帮助,我能找到的唯一一件事就是那个原本应该被翻译的文本。如果你想亲自试验一下,这是代码,但我警告你运行这个代码可能会导致Roblox短时间内不响应,因为它返回了大量的信息。

我不知道我是否做错了什么或者需要什么帮助!我只想让它告诉我“Hello world”在法语中是什么,也没有错误信息。

local http = game:GetService("HttpService")

local Message = "Hello world"

http:UrlEncode(Message) -- 'Hello world' -> 'Hello%20world'

local response = http:RequestAsync(
    {
        Url = "https://translate.google.com/?sl=en&tl=fr&text=" .. Message .. "!&op=translate";
        Method = "GET"
    }
    )

if response.Success then
    print(response.StatusMessage)
    print(response.StatusCode)
    print(response.Body)
    --print(response.Headers)
else
    print("请求失败:", response.StatusCode, response.StatusMessage)
end
点赞
用户2860267
用户2860267

你的问题可能是在你如何URL编码字符串方面。

http:UrlEncode(Message)

HttpService.UrlEncode 返回已编码的字符串作为一个新值。它不会改变现有的值,所以你只需要存储函数调用的结果。

Message = http:UrlEncode(Message)

编辑:正如@Mohamed AMAZIRH所指出的,访问这个URL只会返回HTML。

2021-07-12 13:48:17
用户1789281
用户1789281

当使用浏览器(例如)访问网址 https://translate.google.com/?sl=en&tl=fr&text=Hello%20World!&op=translate 时,你能看到的翻译是浏览器加载页面后执行的Javascript代码获取的。

浏览器检索网页的 html body(就像你在代码中所做的那样),然后执行html body中的javascript来检索翻译并更新页面。

除非你使用类似 Selenium 的浏览器驱动,否则我不认为有简单的方法能够实现你想要的功能。

此外,我相信 Google 有一些针对自动机器人的保护措施,所以在发送太多请求后,你的程序可能会被 ReCaptcha 阻止。

正确的翻译方法是使用Google Cloud Translate API,我认为它是免费的,每个月最多可以请求 500k 次。此外,Microsoft 的 Azure Translator 也有免费的层级。

2021-07-13 07:04:34