Om man ska skicka(POST) iväg ett xml-dokument från en server till en annan (genom att använda PHP alltså)... hur fördjupar man sig i detta ämne på ett enkelt sätt så man förstår hur man ska göra?
POST XML
7 svar · 391 visningar · startad av eureca
Länken ovan verkar vara exakt det jag är ute efter. Dock känner jag mig helt virrig o stressad av att läsa koden.
Var i koden skriver jag Url:en till sidan som ska ta emot xml-datan jag skickar? antar att det ska skrivas i nån av dom nedanstående?
var $path = "/";
var $agent_name = "MyAgent";
och hur skriver jag xml-datan i detta skript?
Jag vet att jag borde fördjupa mig i ämnet, men det är lite bråttom för mig o testa om jag ska använda mig av denna "teknik" eller inte
Hm, jag orkar inte läsa artikeln - men jag kan ge dig ett litet sample som skickar med POST:
<?php
$xml = implode( '', file( "MyXML.xml" ) );
$remoteServer = "www.server.com";
$remotePort = 80;
$remotePage = "/page.php";
// Öppna en koppling mot servern
$socketPointer = fsockopen( $remoteServer, $remotePort, $errorNumber, $errorString, 25 );
if( !$socketPointer ) {
$errorMessage = "Felnummer: " . $errorNumber . "<br />";
$errorMessage .= "Fel: " . $errorString;
die( $errorMessage );
}
// Skicka data till angiven sida
fputs( $socketPointer, "POST " . $remotePage . " HTTP/1.1\n" );
fputs( $socketPointer, "Host: " . $remoteServer . "\n" );
fputs( $socketPointer, "Content-Type: application/x-www-form-urlencoded\n" );
fputs( $socketPointer, "Content-Length: " . strlen( $xml ) . "\n\n" );
fputs( $socketPointer, "xml=" . rawurlencode( $xml ) );
// Ta emot resultatet
$remoteResult = "";
while( !feof( $socketPointer ) )
$remoteResult .= fgets( $socketPointer, 128 );
fclose( $socketPointer );
echo $remoteResult;
?>
Tack spin! ska sätta tänderna i det så snart som möjligt.
Är detta föresten det som går under benämningen "webservices"? (dvs att skicka xml-data fram o tillbaka mellan servrarna)
Tja, på sätt och viss åtminstone. Webservices är ju till för att man enkelt ska kunna ta emot dynamisk information från en sida. Din sida som du anropar via scriptet ( Alltså inte PHP-dokumentet som körs ) kan vara en webservice, beroende på hur den hanterar XML:en som du skickar. Ett exempel:
WebService.php
<?php
if( !isset( $_POST[ 'xml' ] ) ) {
$errorMessage = "Your query did not contain valid data";
die( $errorMessage );
}
$strXML = rawurldecode( $_POST[ 'xml' ] );
// Processa din XML och hämta relaterad data från t.ex. en DBMS
// Proppa in resultatet som ska skickas tillbaka, till variabeln $xmlResult
// Returnera resultatet:
echo $xmlResult;
?>
ServiceConnect.php
<?php
if( !isset( $_GET[ 'type' ] ) ) {
$errorMessage = "What are you looking for?";
die( $errorMessage );
}
$xml = "<" . "?" . "xml version=\"1.0\" encoding=\"ISO-8859-1\"" . "?". ">\n";
$xml .= "<rotElement>\n";
$xml .= "<element>";
$xml .= "<typ>" . $_GET[ 'type' ] . "</typ>";
$xml .= "</element>\n";
$xml .= "</rotElement>";
$remoteServer = "www.server.com";
$remotePort = 80;
$remotePage = "/XmlService.php";
// Öppna en koppling mot servern
$socketPointer = fsockopen( $remoteServer, $remotePort, $errorNumber, $errorString, 25 );
if( !$socketPointer ) {
$errorMessage = "Felnummer: " . $errorNumber . "<br />";
$errorMessage .= "Fel: " . $errorString;
die( $errorMessage );
}
// Skicka data till angiven sida
fputs( $socketPointer, "POST " . $remotePage . " HTTP/1.1\n" );
fputs( $socketPointer, "Host: " . $remoteServer . "\n" );
fputs( $socketPointer, "Content-Type: application/x-www-form-urlencoded\n" );
fputs( $socketPointer, "Content-Length: " . strlen( $xml ) . "\n\n" );
fputs( $socketPointer, "xml=" . rawurlencode( $xml ) );
// Ta emot resultatet
$remoteResult = "";
while( !feof( $socketPointer ) )
$remoteResult .= fgets( $socketPointer, 128 );
fclose( $socketPointer );
echo "Resultat från XmlService.php:<br />" . $remoteResult;
Du kan också optimera min kod, så att den blir snabbare, genom att inte dela upp sändingen ( med fputs() ) som jag har gjort. Det är däremot lättare att läsa och förstå om den är uppdelad. Samma sak med konkateringen av strängarna till varaiabeln $xml.
Nu har jag testat och köra med din första kod du gav mig. När jag skickar till den mottagare jag vill skicka till så får jag dock upp felmedelandet:
"Felnummer: 9
Fel: Bad file descriptor"
Var kan man läsa mer om felnummer och vad dom innebär?
Vet inte om det är något fel i mitt skript eller om det är mottagaren som inte gillar det jag skickar bara.
Testa min andra kod, jag hade hittat fel i min första innan jag redigerade, kanske hade du fått den. ;)
Felet har jag ingen aning om vad det är, men det kan vara sättet du anropar servern på. Hur ser strängen $remoteServer ut?