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

首先,英语是我的外语。
在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 Player进行播放。

如前所述,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

如上所述,这项工作需要用Java语言完成,这在很大程度上取决于发出请求的浏览器或设备(例如HTML5功能)

不过,我必须补充一点,尽管这有望说明正在发生的事情,但我怀疑它是否可以用作解决方案;由于有500个请求存在一个付费专区,我以为他们会在一段时间内寻找来自同一IP地址的多个请求,并且会阻止任何此类避免付款的地址。

当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java

我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…

改造正在返回一个空的响应主体 - java

我正在尝试使用Retrofit和Gson解析一些JSON。但是,我得到的响应机构是空的。当我尝试从对象中打印信息时,出现NullPointerException。我确保URL正确,并且我也确保POJO也正确。我正在使用jsonschema2pojo来帮助创建POJO类。这是我要解析的JSON{ "?xml": { "@versi…

Mongo汇总 - javascript

我的收藏中有以下文件{ "_id": ObjectId("54490b8104f7142f22ecc97f"), "title": "Sample1", "slug": "samplenews", "cat": …

如何在Wiremock中为JUNIT匹配精确的json - java

我正在使用Wiremock在Spring启动应用程序中模拟Junit的REST服务。我的问题是,我无法匹配多个匹配模式。 Junit.javaStringValuePattern pattern = WireMock.matching(".*"); givenThat(post(urlEqualTo("/softwares�…

Ajax表单未获得结果 - javascript

我有一个带有搜索功能的主页。从主页搜索可以正常工作,但是当我尝试使用ajax表单(在url.com/search?id=biology上)再次搜索时,我被重定向到404页面,提示未找到/Search。主页上的表格:@using (Html.BeginForm("Index", "Search", new { Retur…