iPXE discussion forum

Full Version: How to POST / GET params with '+' char inside ?
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hi, first sorry for the previous twice posting which were not working, may because the forum seem to be a little down at that times.

I'm trying to store some parameters on webserver which I can retrieve later in a script form, but can't get the '+' sign to be send / retrieve.

#!ipxe
set data_1:string some+thing
set data_2:uristring some+thing
params --name mydata
param --params mydata data_1 ${data_1}
param --params mydata data_2 ${data_2}
imgfetch http://webserver/conf.php##params=mydata || echo can't POST
//imgfetch http://webserver/conf.php?data_1=some+thing || echo can't GET

conf.php file from webserver :

<?php
$myfile = fopen("/var/www/html/mydata", "wb") or die("Unable to open file!");
fwrite($myfile, "#!ipxe\n");

//foreach ($_GET as $key => $value){
foreach ($_POST as $key => $value){
$txt = "set " . $key . "\t" . $value . "\n";
fwrite($myfile, $txt);
}
fclose($myfile);
?>

result of mydata file :

#!ipxe
set data_1 some thing
set data_2 some thing

I need this for URL like :

https://cloudfront.debian.net/cdimage/un...onfree.iso

Any ideas ?
Don't know the exact answer, but I think this approach should work. The hex value for ASCII "+" is 2B.

As noted there, if it doesn't work, echo the URL in iPXE.
thx for reply, I tried it.

set plus:hex 2b
set plus ${plus:string}
set myURL some${plus}thing

params --name mydata
param --params mydata data_1 ${myURL}
etc...

unfortunaly don't work.

Is this "bug" come from iPXE or webserver / php5 side ?

but if I try :

params --name mydata
param --params mydata data_1 some${plus}thing
etc...

I got : some_thing
and not : some+thing

params --name mydata
param --params mydata data_1 some+thing
etc...

the same (some_thing)

Huh
Did you try echoing ${myURL}? Perhaps I misunderstood the problem - if it's the params features causing the issue, perhaps you can use standard URL encoding, and request some%2Bthing instead of some+thing?
Hi, yes I tried substitute with %2B like :

param --mydata data_1 some%2Bthing , with no luck...

I tried both POST & GET methods with same results.
I tried GET method by the browser and work as expected, eg :
http://127.0.0.1/conf.php?data=some%2Bthing

mydata file : some+thing

Then I think it's an iPXE issue.

But I made an ugly and dirty hack to make it works by using base64 encoding, eg :

#!ipxe
set data_1:string some+thing
set data_2.....
params --name mydata
param --params mydata data_1 ${data_1:base64}
param --params mydata data_2.....
imgfetch http://webserver/conf.php##params=mydata || echo can't POST

conf.php file from webserver :

<?php
$myfile = fopen("/var/www/html/mydata", "wb") or die("Unable to open file!");
fwrite($myfile, "#!ipxe\n");

foreach ($_POST as $key => $value){
$txt = "set " . $key . "\t" . base64_decode($value) . "\n";
fwrite($myfile, $txt);
}
fclose($myfile);
?>

result of mydata file :

#!ipxe
set data_1 some+thing
set data_2.....

Dodgy
Reference URL's