0

我试图向 amfphp/gateway.php 发送请求并在 c# 中取回响应,但我收到此错误:

Fatal error: Uncaught exception 'VerboseException' with message 'Malformed AMF message,                      connection may have dropped' in   /usr/local/www/realtime.fdim.dk/amfphp/core/amf/io/AMFBaseDeserializer.php:210
Stack trace:
#0 [internal function]: amfErrorHandler(1024, 'Malformed AMF m...', '/usr/local/www/...',   210, Array)
#1 /usr/local/www/realtime.fdim.dk/amfphp/core/amf/io/AMFBaseDeserializer.php(210): trigger_error('Malformed AMF m...')
#2 /usr/local/www/realtime.fdim.dk/amfphp/core/amf/io/AMFBaseDeserializer.php(134): AMFBaseDeserializer->readHeader()
#3 /usr/local/www/realtime.fdim.dk/amfphp/core/amf/app/Filters.php(38): AMFBaseDeserializer->deserialize(Object(AMFObject))
#4 /usr/local/www/realtime.fdim.dk/amfphp/core/amf/app/Gateway.php(177): deserializationFilter(Object(AMFObject))
#5 /usr/local/www/realtime.fdim.dk/amfphp/gateway.php(155): Gateway->service()
#6 {main}
thrown in /usr/local/www/realtime.fdim.dk/amfphp/core/amf/io/AMFBaseDeserializer.php on line 210

这是我的代码:

CookieContainer loginCookie = new CookieContainer();
private void button1_Click(object sender, EventArgs e)
    {
       //Login to realtime.fdim.dk
        String postData = "User.login "+"\n"+"username"+"\n"+"password";
        MessageBox.Show(postData);
        CookieContainer tempCookie = new CookieContainer();
        UTF8Encoding encodning = new UTF8Encoding();
        Byte[] bytedate = encodning.GetBytes(postdata);
        HttpWebRequest postRequest = (HttpWebRequest)WebRequest.Create("http://realtime.fdim.dk/amfphp/gateway.php");
        postRequest.Method = "POST";
        postRequest.KeepAlive = true;
        postRequest.CookieContainer = tempCookie;
        postRequest.ContentType = "application/x-amf";
        postRequest.Referer = "Referer: http://realtime.fdim.dk/application_v1.02.4.swf";
        postRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0";
        postRequest.ContentLength = bytedate.Length;
        Stream postReuestStream = postRequest.GetRequestStream();
        postReuestStream.Write(bytedate, 0, bytedate.Length);
        postReuestStream.Close();
        HttpWebResponse postResponse;
        postResponse = (HttpWebResponse)postRequest.GetResponse();
        tempCookie.Add(postResponse.Cookies);
        loginCookie = tempCookie;
        StreamReader postreqreader = new StreamReader(postResponse.GetResponseStream());
        String thePage = postreqreader.ReadToEnd();
        richTextBox1.Text = thePage;

所以看来我的 postData 编码不正确但我不知道如何解决它..

编辑:

我现在将我的 Postdata 更改为 hexString,然后将其转换为 byte[]:

String PostDataTest =  "00 03 00 00 00 01 00 0A 55 73 65 72 2E 6C 6F 67 69 6E 00 03 2F 31 32 00 00 00 2D 0A 00 00 00 02 02 00 18 6D 61 74 68 69 61 73 2E 73 2E 61 6E 64 65 72 73 65 6E 40 6A 70 2E 64 6B 02 00 0A 70 70 65 72 31 37 39 33 ";

Byte[] bytedate = ConvertHexStringToByteArray(PostDataTest);

但是现在我收到此错误:

 Fatal error: Uncaught exception 'VerboseException' with message 'unpack(): Type d: not enough input, need 8, have 0' in /usr/local/www/realtime.fdim.dk/amfphp/core/amf/io/AMFBaseDeserializer.php:334

堆栈跟踪:#0 [内部函数]:amfErrorHandler(2, 'unpack(): Type ...', '/usr/local/www/...', 334, Array) #1 /usr/local/www /realtime.fdim.dk/amfphp/core/amf/io/AMFBaseDeserializer.php(334): unpack('dflt', '') #2 /usr/local/www/realtime.fdim.dk/amfphp/core/ amf/io/AMFDeserializer.php(276): AMFBaseDeserializer->readDouble() #3 /usr/local/www/realtime.fdim.dk/amfphp/core/amf/io/AMFDeserializer.php(163): AMFDeserializer-> readData(0) #4 /usr/local/www/realtime.fdim.dk/amfphp/core/amf/io/AMFDeserializer.php(300): AMFDeserializer->readArray() #5 /usr/local/www/realtime .fdim.dk/amfphp/core/amf/io/AMFBaseDeserializer.php(226): AMFDeserializer->readData(10) #6 /usr/local/www/realtime.fdim.dk/amfphp/core/amf/io/ AMFBaseDeserializer.php(134): AMFBaseDeserializer->readHeader() #7 /usr/local/www/realtime.fdim.dk/amfphp/core/amf/app/Filt in /usr/local/www/realtime.fdim.dk/amfphp/core/amf/io/AMFBaseDeserializer .php 在第 334 行

4

0 回答 0