[OSM-dev] Wishes
John Smith
deltafoxtrot256 at gmail.com
Thu Mar 18 15:59:57 GMT 2010
On 19 March 2010 00:21, Bernhard zwischenbrugger <bz at datenkueche.com> wrote:
> GPX is XML and there is no need for multipart/form-data upload.
GPX might be XML, but it's not HTTP, and if you want to upload a file
over HTTP you need to talk multipart/form...
> To debug that kind of uploads is not possible.
There is plenty of ways to debug, just like everything else it's a
skill set, in this case you need to sniff packets...
<?
$user = 'username';
$pass = 'password';
$file = '/tmp/filename.gpx';
$url = "/api/0.6/gpx/create";
$file = trim($file);
if($file == '')
continue;
if(!file_exists($file))
continue;
$boundary = '----------'.sha1(date("U").$fn.rand(0, date("U")));
$fn = md5(basename(date("U").$file.$boundary));
$cmd = "grep '<trkpt' '$file'|wc -l";
$trackpoints = trim(`$cmd`);
if($trackpoints >= 300)
{
$body = "";
$fn .= '.gpx';
$data = gzencode(file_get_contents($file));
$body .= '--'.$boundary."\r\n";
$body .= "Content-Disposition: form-data; name=\"file\";
filename=\"$fn.gz\"\r\n\r\n";
$body .= $data."\r\n";
$body .= '--'.$boundary."\r\n";
$body .= "Content-Disposition: form-data; name=\"description\"\r\n\r\n";
$body .= "uploaded route.\r\n";
$body .= '--'.$boundary."\r\n";
$body .= "Content-Disposition: form-data; name=\"tags\"\r\n\r\n";
$body .= "automatic_upload ".date("Y F")."\r\n";
$body .= '--'.$boundary."\r\n";
$body .= "Content-Disposition: form-data; name=\"public\"\r\n\r\n";
$body .= "1\r\n";
$body .= '--'.$boundary."--\r\n";
$head = "POST $url HTTP/1.1\r\n";
$head .= "host: www.openstreetmap.org\r\n";
$head .= "Transfer-Encoding: 8bit\r\n";
$head .= "Authorization: Basic ".base64_encode($user.':'.$pass)."\r\n";
$head .= "Content-Length: ".strlen($body)."\r\n";
$head .= "Content-type: multipart/form-data; boundary=$boundary\r\n";
$head .= "Connection: close\r\n\r\n".$body;
//echo $head;
if(($fp = @fsockopen("www.openstreetmap.org", 80)) === FALSE)
continue;
fputs($fp, $head);
$line = $lastline = "";
$start = false;
while(!feof($fp))
{
$line = trim(fgets($fp));
if($start == false && $line == '')
{
$start = true;
continue;
}
if($start == false)
continue;
$id = $line;
break;
}
fclose($fp);
if($id <= 0)
continue;
}
More information about the dev
mailing list