Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sending HTTP request with multiple parameters having same name

I need to send a HTTP request (and get XML response) from Flash that looks similar to following:

http://example.com/somepath?data=1&data=2&data=3

I.e. having several parameters that share same name, but have different values.

Until now I used following code to make HTTP requests:

var resp:XML = new XML();
resp.onLoad = function(success:Boolean) {/*...*/};
resp.ignoreWhite = true;

var req:LoadVars = new LoadVars();
req["someParam1"] = 3;
req["someParam2"] = 12;

req.sendAndLoad("http://example.com/somepath", resp, "GET");

In this case this will not do: there will be only one parameter having last value.

What are my options? I'm using actionscript 2.

Added

I guess, I can do something like that:

var url:String = myCustomFunctionForBuildingRequestString();
var resp:XML = new XML();
resp.onLoad = function(success:Boolean) {/*...*/};
resp.load(url);

But in that case I am loosing ability to do POST requests. Any alternatives?

Changing request is not appropriate.

like image 223
n0rd Avatar asked Dec 02 '09 19:12

n0rd


People also ask

How can I send multiple parameters in HTTP GET request?

You have multiple options for passing multiple parameters to a GET method: FromRouteAttribute, FromQuery and Model Binding.It gets the data from various sources in the form of key-value pairs from the following sources: Form fields. Request body. Route data parameters.

How can I send multiple parameters in POST request URL?

How can I send multiple parameters in POST request URL? Multiple Parameters In the above URL, '&' should be followed by a parameter such as &ie=UTF-8. In this parameter, i.e., is the key and, UTF-8 is the key-value. Enter the same URL in the Postman text field; you will get the multiple parameters in the Params tab.

How do you pass multiple values in one parameter?

Pack the values into one string with comma separated. Set the string as parameter and pass it into the SQL statement. Unpack the values and insert the values into a table, Where customerid in (select id from #temp)

Which is the delimited to pass multiple parameters in query type of HTTP GET method?

Parameters are passed to the web application as part of an HTTP request in the form of ”name=value” strings. When multiple parameters are required they are delimited by the '&' character.


2 Answers

The standard http way of sending array data is

http://example.com/?data[0]=1&data[1]=2

But this isn't wrong either (added from comment):

http://example.com/?data[]=1&data[]=2

Sending more parameters with the same name like you're doing, in practice means that all but the last item should be ignored. This is because when reading variables, the server overwrites (in memory) any item that has the same name as that one, because renaming a variable isn't good practice and never was.

I don't know much AS (none :p) but you'd access it as a list or array or whatever data structures it has.

like image 178
Tor Valamo Avatar answered Oct 22 '22 04:10

Tor Valamo


Although POST may be having multiple values for the same key, I'd be cautious using it, since some servers can't even properly handle that, which is probably why this isn't supported ... if you convert "duplicate" parameters to a list, the whole thing might start to choke, if a parameter comes in only once, and suddendly you wind up having a string or something ... but i guess you know what you're doing ...

I am sorry to say so, but what you want to do, is not possible in pure AS2 ... the only 2 classes available for HTTP are LoadVars and XML ... technically there's also loadVariables, but it will simply copy properties from the passed object into the request, which doesn't change your problem, since properties are unique ...

if you want to stick to AS2, you need an intermediary tier:

  1. a server to forward your calls. if you have access to the server, then you create a new endpoint for AS2 clients, which will decode the requests and pass them to the normal endpoint.
  2. use javascript. with flash.external::ExternalInterface you can call JavaScript code. You need to define a callback for when the operation is done, as well as a JavaScript function that you can call (there are other ways but this should suffice). Build the request string inside flash, pump it to JavaScript and let JavaScript send it to the server in a POST request and get the response back to flash through the callback.

up to you to decide which one is more work ...

side note: in AS3, you'd use flash.net::URLLoader with dataFormat set to flash.net::URLLoaderDataFormat.TEXT, and then again encode parameters to a string, and send them.

like image 22
back2dos Avatar answered Oct 22 '22 05:10

back2dos