在 C# 中以 base64 编码的 XMLHttpRequest 调用 FastRPC

Posted

技术标签:

【中文标题】在 C# 中以 base64 编码的 XMLHttpRequest 调用 FastRPC【英文标题】:Call FastRPC as XMLHttpRequest encoded in base64 in C# 【发布时间】:2018-02-15 14:51:50 【问题描述】:

我正在尝试使用 C# 从捷克服务 (mapy.cz) 提供的 API 中获取高度。这是JSFiddle 中的 JS 示例。

var coords = SMap.Coords.fromWGS84(15, 50);
coords.getAltitude().then(altitudeResponse);

请求的内容类型为:application/x-base64-frpc

所以我的解决方案是在 C# 中创建 FastRPC 调用,通过 base64 对其进行编码并将其发送到服务器。我搜索了如何创建这样的电话,但没有运气。

有没有人建议如何解决这个问题?

非常感谢,

编辑: 我试图比较两个请求的负载:

yhECAWgLZ2V0QWx0aXR1ZGVYAVgCGEC4AgplXC1AGM91aIktS0lAOAEQ
yhECAWgLZ2V0QWx0aXR1ZGVYAVgCGEC4Agrlci1AGAsmNM7mQElAOAEQ

而区别应该是调用的参数。这意味着,另一种可能的解决方案是构造这个请求:

yhECAWgLZ2V0QWx0aXR1ZGVYAVgCGEC4Ag + [参数] + lAOAEQ

EDIT2:

另一个提示可能是here。

它生成他们的 FRPC 调用并打印字节序列。

【问题讨论】:

我必须接近,因为我得到了高度这个词:byte[] response1 = Convert.FromBase64String("yhECAWgLZ2V0QWx0aXR1ZGVYAVgCGEC4AgplXC1AGM91aIktS0lAOAEQ");字符串响应 = Encoding.UTF8.GetString(response1); 这并不奇怪。这是因为返回的高度在那里表示为 float 或 int。它没有被编码为字符。 我没说奇怪!!! 我强制服务器以 XML 格式发送响应,现在我得到了可读数据。最后一个挑战...创建该请求有效负载。 【参考方案1】:

编码/解码这个有效载荷是在 https://github.com/seznam/JAK/blob/master/util/frpc.js

编码后的数据可以在控制台调用中显示 console.log(JAK.FRPC.parse(JAK.Base64.atob("your-payload")));。将此代码粘贴到任何 example 时可以轻松对其进行测试,因为它们可以直接在 JSFiddle 中进行调整。

【讨论】:

以上是关于在 C# 中以 base64 编码的 XMLHttpRequest 调用 FastRPC的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中实现 Base64 URL 安全编码?

使用 c# 将 FileStream 编码为 base64

c# Base64编码和图片的互相转换代码

Base64的编码规则和C#实现

C#解码base64编码的二进制数据的代码

用C#实现Base64处理,加密解密,编码解码