如何在c#下向web服务器发送执行js-function的请求
本文关键字:执行 js-function 请求 服务器 下向 web | 更新日期: 2023-09-27 18:16:04
首先,英语是我的外语。在c#下,我试图将POST http请求发送到forvo.com(带有单词发音的银行),以获得带有某些单词发音的音频文件(流)。例如,我想点击button1,听单词"stack"的发音,我从forvo.com网站上得到。我有一个代码:
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函数做什么,或者它是什么?
我是一个web编程新手,对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地址的多个请求,并将阻止任何此类避免付款的地址。