Jeg vil gerne uploade automatisk til webpack fra et php-script, der emulerer
at en bruger har udfyldt en formular. Men jeg får bare em fejl 500 internal
error fra webpack.
Et andet script. der er opbygget med det samme login-modul, kan poste data
til en formular, og få returneret data (ordrenr->TNT-numre for de afsendte
pakker), så selve login-delen virker. Jeg har bare problemer med at poste
til
http://www.postdanmark.dk/pfs/PfsGetLabelDataServlet.
<?php
$pwd="Hemmelig";
$UID="00000000";
// funktion, der poster en form, og returnerer hvad der matcher regexp.
// Den funktion virker....
function matchurl($url,$data,$regexp,$asarray=FALSE) {
$cmd= "/usr/bin/wget -S --save-cookies /tmp/cookies1 --load-cookies
/tmp/cookies1 --keep-session-cookies --user-agent='Mozilla/4.0 (compatible;
MSIE 6.0; Windows NT 5.0; T312461; .NET CLR 2.0.50727)' ";
if ($data>"") $cmd .= " --post-data='".$data."'";
$cmd .=" '".$url."' -O - ";
exec ($cmd,$return_message_array, $return_number);
if ($asarray) {return $return_message_array;}
else {
for ($i = 0; $i < count($return_message_array); $i++) {
$results = $results.$filler.$return_message_array[$i];
}
if (preg_match($regexp,$results,$matches))
{return $matches[1];}
}
}
// Login på webpack
$data="clientID=".$UID."&userID=admin&password=".$pwd."&submit=Start+Webpack&gotoURL=
http://www.postdanmark.dk/pfs/pfsWelcome.jsp";
$url="
http://www.postdanmark.dk/pfs/PfsLoginServlet";
$res=matchurl($url,$data,"/window.open\(\"(.*?)\"/"); // Send login auth,
og se efter "window open(url)" i resultat
// Vi ledes videre til et vindue, åben det
$url2="
http://www.postdanmark.dk".$res;
$token=matchurl($url2,"","/pfsWelcome.jsp\?token=(.*?)&/");
// Vi er logget ind; token er værdi, der skal sendes med, så webpack kan
kende os
// Indtil her virker det; det bliver brugt i andre scripts
// Nedenstående giver en fejl 500 fra
www.postdanmark.dk
// Lav request body
$body = http_request_body_encode (
array ("token" => $token,
"programID" => "pfs",
"clientID" => $UID,
"userID" => "admin",
"sessionID" => "0",
"accessCode" => "UC",
"exTime" => "120",
"spID" => "pfsWelcome.jsp",
"tpID" => "pfsShowNoOfItems.jsp",
"cpID" => "pfsReadFile.jsp",
"errorID" => "",
"buttonPressed" => "OK",
"importType" => "WEBPACK",
"ModtagerType" => "")
,array(array("name" => "fileName","type" => "text/plain","file" =>
"/dev/null")) // Dummy værdier for fil
);
// Data, der skal uploades. Når det virker, skal data hentes fra db
istedet;
$data="DK;;PIP;19.11.2008;69098;18341;Andersine And;;;Ved Søen
25;;;1234;Andeby;;;;;;;;;;;;;;1;1;;P;;";
$aBody=split("\r\n",$body,2); // Første linie er Content-Type:
multipart/form-data; boundary=---------c9f76f056d7c
// Klip den af
$type=split(":",$aBody[0],2); // Del den i key og value
$aB=split("=",$type[1]); // Split value igen efter =
$boundary=$aB[1]; // Value er boundary
$end="\r\n--".$boundary."--"; // Sidste linie
// $realbody=$aBody[1]; // Send ikke første linie
$realbody=$body; // Det er ligegyldigt....
// Indsæt csv-data og navn i stedet for dummy
$realbody=str_replace(array("null",$end),array("webpack.csv",$data.$end),$realbody);
// echo "<pre>$realbody</pre>";
$MODTAGER="
http://www.postdanmark.dk/pfs/PfsGetLabelDataServlet";
//
www.postdanmark.dk giver som sagt fejl 500 internal server error.
// Postes til en side, der udskriver phpinfo(), ser det korrekt ud.
echo http_request ( HTTP_METH_POST ,$MODTAGER, $realbody ,
array("headers" =>array ($type[0] => $type[1],
"Content_Length" => strlen($realbody),
"User_agent" => $_SERVER["HTTP_USER_AGENT"]), // Måske
foretrækker postdanmark IE?
"cookiestore" => "/tmp/cookies1") ,
$info );
?>