如何通过HttpClient Post Request发送AMF3对象



我在一个旧网站上工作,该网站使用AMF包将数据发送到服务器。我需要向这个网站发送一些文本数据,并将这些数据保存到这个网站。换句话说,我想自动化这个网站。

我找到了fluorinefx库,但它不再得到所有者的支持,互联网上也没有关于它的文档。我尝试使用fluorinefx的serialize类来序列化我的字典数据,并将其发送到具有内容类型头application/x-amf的服务器。但是httpclient不支持AMF字节数组。

当我尝试使用fluorinefx的NetConnection类并使用NetConnection时。Connect(url(方法,如果url以http://开头,则没有问题,但如果url以https://开头,则会出现URïFormat异常。由于我正在工作的网站使用https://,我也无法使用此Connect方法。

所以请帮助我,我如何准备一个结构正确的AMF对象并用HttpClient发送它。或者有没有其他库可以用来发送AMF包。(我也看了WebOrb和DotAmf,但它们也不起作用(

谢谢。

public static object SendAMF(string method, object[] arguments)
{
AMFMessage message = new AMFMessage(3);
message.AddHeader(new AMFHeader("headerKey", false, "headerValue"));
message.AddBody(new AMFBody(method, "/1", arguments));
MemoryStream ms = new MemoryStream();
AMFSerializer serializer = new AMFSerializer(ms);
serializer.WriteMessage(message);
serializer.Flush();
serializer.Dispose();
var request = (HttpWebRequest)WebRequest.Create($"{Endpoint}/Gateway.aspx?method={method}");
byte[] data = Encoding.Default.GetBytes(Encoding.Default.GetString(ms.ToArray()));
request.GetRequestStream().Write(data, 0, data.Length);
try
{
var response = (HttpWebResponse)request.GetResponse();
ms = new MemoryStream();
response.GetResponseStream().CopyTo(ms);
dynamic obj = DecodeAMF(ms.ToArray());
ms.Dispose();
response.Dispose();

return obj;
} 
catch(Exception ex)
{
ms.Dispose();
return "ERROR! " + ex.ToString();
}
}
public static dynamic DecodeAMF(byte[] body)
{
MemoryStream memoryStream = new MemoryStream(body);
AMFDeserializer amfdeserializer = new AMFDeserializer(memoryStream);
AMFMessage amfmessage = amfdeserializer.ReadAMFMessage();
dynamic content = amfmessage.Bodies[0].Content;
memoryStream.Dispose();
amfdeserializer.Dispose();
return content;
}

`

最新更新