c# - 如何在 C# 下向网络服务器发送执行 js 功能的请求?

标签 c# javascript http post request

首先,英语是我的外语。 在 C# 下,我试图将 POST http 请求发送到 forvo.com(带有单词发音的银行)以获取带有某个单词发音的音频文件(流)。例如,我想单击button1并听从forvo.com网站获得的单词“stack”的发音。为此我有一个代码:

 using (var wb = new WebClient())
            {
                var data = new NameValueCollection();
                data["LANGUAGE_ID"] = "39";
                data["WORD"] = "someword"; //this tag doesnt make effect to request
                //var response = wb.UploadValues("http://www.forvo.com/search/", "POST", data);
                byte[] responseArray = wb.UploadValues("http://www.forvo.com/search/data", "POST", data);
                File.WriteAllBytes(Path.GetDirectoryName(Application.ExecutablePath) + "\\fi2le.html", responseArray);  
            }

通过这些操作,我试图获取音频文件的链接。查看 file.html 后,我看到这些字符串

<a href="/word/data/#en" title="Listen data pronunciation" onclick="Play(38630,'ODk3NTU5NS8zOS84OTc1NTk1XzM5XzE3MjNfMjI4MjAubXAz','ODk3NTU5NS8zOS84OTc1NTk1XzM5XzE3MjNfMjI4MjAub2dn');return false;" rel="nofollow"><img src="/_presentation/img/ico_play.gif" alt="data pronunciation" id="play_38630" width="23" height="23" /></a><a href="/word/data/#en" title="data pronunciations">data</a> and others looking similiar.

我可以用这些 js 函数做什么或者它是什么?

我是网络编程新手,对js一无所知。 我知道 forvo.com 对于像我这样的任务有自己的 API,但我正在尝试在没有 API 的情况下实现它。

最佳答案

看看这里发生了什么,点击图标会触发 Javascript Play() 函数。

此函数对传递给它的基本 64 编码值进行解码,并使用它们来查找要播放的相关文件,以及您使用的浏览器是否能够理解 audio 元素 (HTML5)在其中播放它,或者,如果没有,它会创建一个 Flash 播放器在其中播放它。

如上所述,Play() 函数的第二个和第三个参数是要播放的文件的 Base-64 编码 URI。它们可以非常简单地解码,如下所示(示例是控制台应用程序):

static void Main()
    {
      string base64a = "ODk3NTU5NS8zOS84OTc1NTk1XzM5XzE3MjNfMjI4MjAubXAz";
      string base64b = "ODk3NTU5NS8zOS84OTc1NTk1XzM5XzE3MjNfMjI4MjAub2dn";

      Console.WriteLine(Encoding.Default.GetString(Convert.FromBase64String(base64a)));
      Console.WriteLine(Encoding.Default.GetString(Convert.FromBase64String(base64b)));

      Console.ReadKey();
    }

如果你运行这个,你会发现它们转换为:

8975595/39/8975595_39_1723_22820.mp3
8975595/39/8975595_39_1723_22820.ogg

Play 函数中有一些逻辑来确定使用哪一个,但最终,我最终播放以下文件:

http://audio.forvo.com/mp3/8975595/39/8975595_39_1723_22820.mp3

这项工作需要在 Javascript 中完成,因为很大程度上取决于发出请求的浏览器或设备,如上面突出显示的(例如 HTML5 功能)

不过,我必须补充一点,虽然这有望解释正在发生的事情,但我怀疑它作为解决方案是否有任何用处;由于付费墙存在 500 个请求,我原以为他们会在一段时间内监视来自同一 IP 地址的多个请求,并会阻止任何此类避免付款的地址。

关于c# - 如何在 C# 下向网络服务器发送执行 js 功能的请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25069734/

相关文章:

c# - 检测 Visual Studio 何时为智能感知测试网站

c# - 有谁知道 ASP.Net 电子邮件控件/用户控件?

javascript - 检查选定的图像尺寸并在超出范围时发出警报

javascript - 使用一个 http 请求下载文件,无需压缩

http - svnedge 中的非法 cookie 属性

c# - 等待长时间(24 小时或更长时间)的正确计时器是什么?

c# - 在 C# 中写入事件日志 - 写入应用程序日志时是否需要使用 EventLog.CreateEventSource?

javascript - 如何增大或减小整个页面的字体大小

javascript - 如何使用 jQuery 将一个类替换为另一个类?

java - 如何修改 HttpEntity 的内容