2012-10-08 26 views
5

Khi tôi thực hiện đoạn mã sau:URLRequest/URLLoader tự động chuyển đổi yêu cầu POST để GET

var urlRequest:URLRequest = new URLRequest("http://somehost/with/some/path?andsomequerystring=true"); 
urlRequest.method = 'POST'; 
var urlLoader:URLLoader = new URLLoader(urlRequest); 
urlLoader.addEventListener(Event.COMPLETE, function(event:Event):void{ 
    trace('sweet'); 
}); 

Hóa yêu cầu POST rõ ràng của tôi để GET do sự hiện diện của chuỗi truy vấn. Nếu tôi xóa chuỗi truy vấn (và tuần tự hóa thành một phần của nội dung POST), nó sẽ thực hiện thành công yêu cầu POST tương ứng. Có cách nào để ngăn chặn nó làm điều đó không? Máy chủ của tôi yêu cầu yêu cầu POST phải được thực hiện bằng chuỗi truy vấn.

+0

Tôi khuyên bạn nên xem thư viện này nếu không có gì khác cung cấp: https://github.com/gabriel/as3httpclient có vẻ như điều này đã vượt qua một số vấn đề tôi đã gặp phải khi sử dụng các lớp được cung cấp. – shaunhusain

+2

Xin lưu ý về github.com/gabriel/as3httpclient. Đây là một thư viện socket tùy chỉnh, do đó nó yêu cầu Socket Security Policy trên máy chủ, bạn sẽ cố gắng lấy dữ liệu từ đó. Không phải ai cũng cung cấp dịch vụ này. –

Trả lời

8

Ah nghĩ tôi tìm thấy câu trả lời, có vẻ như bạn phải chỉ định một cơ thể cũng hay khác nó vẫn sẽ gửi đi như một yêu cầu GET từ tài liệu của họ:

Lưu ý: Nếu chạy trong Flash Player và tham chiếu biểu mẫu không có nội dung, Trình phát Flash tự động sử dụng thao tác GET, ngay cả khi phương thức là được đặt thành URLRequestMethod.POST. Vì lý do này, nên luôn bao gồm phần thân "giả" để đảm bảo rằng phương pháp đúng là được sử dụng.

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/URLRequest.html#url

+1

Điều này nghe có vẻ giống như những gì tôi đang tìm kiếm - Tôi sẽ thử lại và lấy lại cho bạn – badunk

+0

yep, điều này đã làm việc, cảm ơn! như một sang một bên, lớp mx.rpc.Operation ít được sử dụng hơn không thể được cung cấp cho một POST body và vẫn mặc định GET vì tính kỹ thuật đó .... lame – badunk

+0

Rất vui vì nó đã làm việc cho bạn nhờ có thêm thông tin về Operation, Tôi từ từ trượt bản thân mình ra khỏi AS3 nhưng tôi sẽ cố gắng chôn những mẩu tin này trong bộ não của tôi để sử dụng sau này. – shaunhusain

1

Đó là bởi vì con đường bạn đang gặp url của bạn. Nếu bạn muốn có các biến cho phương thức POST, bạn cần sử dụng URLVariables.

var urlRequest:URLRequest = new URLRequest(YOUR_REQUEST_URL_HERE); 
var variables:URLVariables = new URLVariables(); 
variables.andsomequerystring = true; 

urlRequest.data = variables; 
urlRequest.method = 'POST'; 
var urlLoader:URLLoader = new URLLoader(urlRequest); 
urlLoader.addEventListener(Event.COMPLETE, function(event:Event):void{ 
    trace('sweet'); 
}); 
Các vấn đề liên quan