在 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的主要内容,如果未能解决你的问题,请参考以下文章