Flash Socket HTTP-POST 示例

3
1个回答

2
套接字不是执行此任务的正确类。套接字用于处理原始的TCP数据连接。例如,您可以使用Socket与使用专有通信协议的自定义服务器组件集成。
相反,使用URLRequest类从flash/actionscript执行HTTP请求。该类支持POST和GET。它还支持HTTPS。 这里是执行POST请求的示例。(顺便说一下,这是在搜索"as3 post request"时Google给出的第一个结果)
文档(上面链接)、网络上的其他地方也有可用的示例。
编辑:要从HTTP服务器检索二进制流数据,您应该使用URLStream。以下类似代码将通过POST请求实现此目的:
private var stream:URLStream;
private var uploadData:ByteArray;

public function URLStreamExample() {
    stream = new URLStream();
    stream.addEventListener(ProgressEvent.PROGRESS, progressHandler);

    var request:URLRequest = new URLRequest("URLStreamExample.swf");
    request.method = URLRequestMethod.POST;

    // uploadData contains the data to send with the post request
    // set the proper content type for the data you're sending
    request.contentType = "application/octet-stream";
    request.data = uploadData;  

    // initiate the request
    stream.load(request);
}

private function progressHandler(event:Event):void {
    // called repeatedly as data arrives (just like Socket's progress event)

    // URLStream is an IDataInput (just like Socket)
    while( stream.bytesAvailable ) {
       var b:int = stream.readByte();
    }
}

使用普通套接字的问题在于,您需要根据HTTP规范正确编码POST数据。这可能是可行的,但除非您需要做一些特殊的事情,否则它可能会带来更多麻烦。您可以通过将ByteArray分配到URLRequest的.data属性中来发布二进制数据。顺便说一句,这也将免费为您提供HTTPS访问(端口443)。 - martineno
2
HTTP是一种基于TCP套接字通信的协议,因此如果您想要的话,当然可以自己构建协议代码。HTTP由RFC 2616定义。关于HTTP请求结构的描述从第35页开始。对[POST]方法的讨论在第54页上。HTTPS(又称“HTTP over TLS”)由RFC-2818定义。 - Lee
我之所以询问是因为我有一个非常具体的需求。我已经使用URLRequest进行登录时发送POST数据。现在我需要使用flash.net.Socket来进行POST。 - FlashJive.com
1
好的,上面链接的RFC应该会给你足够的信息来完成这个任务。你需要发送正确的请求行,它看起来像POST /path/to/resource.mov HTTP/1.1,然后是必要的头部(根据你的具体需求可能有很多可能性)。接着是一个空行(CRLF),最后是你的POST数据(必须与你发送的头部匹配,特别是content-type和content-length)。HTTPS则更加复杂,所以你需要自己解决。(或者,查看我上面的编辑,使用URLRequest进行流式传输的示例)。 - Lee
如果你已经成功地使用了GET请求,那么有什么大不了的呢?在请求行中将“GET”改为“POST”,然后试一试(很可能会成功)。然后你可以逐步构建:向POST正文添加内容,添加适当的头部(至少包括Content-Length和Content-Type)。HTTP只是人类可读的文本,所以下载一个Web调试代理(比如Charles Proxy),捕获一些真实的POST请求(来自你的浏览器),并查看发送的原始协议数据。你需要自己做一些工作。 - Lee
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接