php - 模拟 api 调用就像在 flash 中发生的一样
问题描述
我想弄清楚如何调用在shoretel IP电话远程运行的php函数。
我可以通过简单的 IP 通过浏览器访问它,它是 Flash 播放器脚本,但我想以编程方式做一些事情,但我找不到任何帮助来做同样的事情。
Flash 播放器应用程序正在调用以下 api https:///gateway.php?PHPSESSID=6432fc5f0999d0f4536fced79b95
并且在它的有效负载中它正在调用像 LSRoom_Remoting.getHeaderInfo 这样的 php 函数
我正在尝试但收到类似“格式错误的 AMF 消息”之类的错误
这是代码
static void Main(string[] args)
{
ServicePointManager.ServerCertificateValidationCallback += (o, c, ch, er) => true;
var content = new StringContent("LSRoom_Remoting.getBoardID", Encoding.UTF8, "application/x-amf");
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Add("Accept","*/*");
client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate, br");
client.DefaultRequestHeaders.Add("Accept-Language", "en-US,en;q=0.9");
client.DefaultRequestHeaders.Add("Connection", "keep-alive");
//client.DefaultRequestHeaders.Add("Content-Length", "47");
//client.DefaultRequestHeaders.Add("Content-Type", "application/x-amf");
client.DefaultRequestHeaders.Add("Cookie", "PHPSESSID=3cbc7ff268e80e78e1458a4adfdd1f56");
client.DefaultRequestHeaders.Add("DNT", "1");
client.DefaultRequestHeaders.Add("Host", "10.6.32.21");
client.DefaultRequestHeaders.Add("Referer", "https://10.6.32.21/interface/ls_interface.swf");
client.DefaultRequestHeaders.Add("Origin", "https://10.6.32.21");
client.DefaultRequestHeaders.Add("X-Requested-With", "ShockwaveFlash/32.0.0.114");
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36");
var result = client.PostAsync(string.Format("https://10.6.32.21/gateway.php?PHPSESSID={0}", "3cbc7ff268e80e78e1458a4adfdd1f56"), content).Result;
//var result = client.DownloadString("https://10.6.32.21/interface/interface.php?uniqueKey=152322314997139&brand=shoretel&key=");
var obj = result.Content.ReadAsStringAsync();
Console.WriteLine(result.Content.ToString());
Console.ReadKey();
}
}
我做错了什么?
解决方案
似乎很可能,该PHPSESSID
过期已久,而没有使用最近请求中的一个;因为默认超时是 15 分钟。如果它还没有过期,你仍然需要构建一个正确的AMF
消息,它由一个 header 和一个 body 组成。有一个库:amfphp,尽管它是用PHP
.
推荐阅读
- angular - 类型'可观察的
>>' 不可分配给类型 'Observable ' - c# - 如何读取 XML 文件并更改某些值
- regex - 在 csv 文件中不正确的字段拆分后删除换行符
- r - R 中 save() 版本 2 的缺点?
- sql-server - 比较表 A 中的两个数据集并插入表 B
- android - 发生错误的地方我找不到它..在android studio中新
- mysql - 我需要使用 MySQL 根据列值进行聚合的方法
- android - RecycleView 在 PDF (PdfDocument) 中不可见
- java - getRuntime() 结果取决于 Netbeans 版本
- reactjs - React Typescript 自定义挂钩:类型“{}”上不存在属性“prop_name”