Gå til innhold

Sende XML via POST og ta i mot returnert XML


Anbefalte innlegg

Videoannonse
Annonse
fsockopen?

6956344[/snapback]

 

Testet denne:

 

function doPost($uri,$postdata,$host){
      $da = fsockopen($host, 80, $errno, $errstr);
      if (!$da) {
          echo "$errstr ($errno)<br/>\n";
          echo $da;
      }
      else {
          $salida ="POST $uri  HTTP/1.1\r\n";
          $salida.="Host: $host\r\n";
          $salida.="User-Agent: PHP Script\r\n";
          $salida.="Content-Type: application/x-www-form-urlencoded\r\n";
          $salida.="Content-Length: ".strlen($postdata)."\r\n";
          $salida.="Connection: close\r\n\r\n";
          $salida.=$postdata;
          fwrite($da, $salida);
                    while (!feof($da))
              $response.=fgets($da, 128);
          $response=split("\r\n\r\n",$response);
          $header=$response[0];
          $responsecontent=$response[1];
          if(!(strpos($header,"Transfer-Encoding: chunked")===false)){
              $aux=split("\r\n",$responsecontent);
              for($i=0;$i<count($aux);$i++)
                  if($i==0 || ($i%2==0))
                      $aux[$i]="";
              $responsecontent=implode("",$aux);
          }//if
          return chop($responsecontent);
      }//else
  }//function-doPost

 

 

Fikk da denne feilmeldingen:

 

Warning: fsockopen() [function.fsockopen]: unable to connect to https://www.domene.no/katalog:80 (Unable to find the socket transport "https" - did you forget to enable it when you configured PHP?) in /www/xmltest.php on line 3

Unable to find the socket transport "https" - did you forget to enable it when you configured PHP? (17949219)

 

 

kikket i phpinfo(), da jeg ikke har tilgang til serveren ennå. Kan problemet ligge her:

Registered Stream Socket Transports: tcp, udp, unix, udg, ssl, sslv3, sslv2, tls

 

Noe mer som skulle vært her? http / https?

Lenke til kommentar

Kommet litt videre.. fant ut at jeg ikke kunne ha med http:// eller https://, men nå får jeg følgende feilmelding:

 

 

Warning: fsockopen() [function.fsockopen]: unable to connect to test.eiendomsinfo.no:443 (Connection timed out) in /kunder/kartbutikken.no/www/adm/xmltest.php on line 3

Connection timed out (110)

 

 

Noen tips til dette?

Lenke til kommentar

Nytt problem

 

Jeg skal sende xml'n til www.domene.no/XMLServices/UserDirUpdates , men da klarer ikke scriptet å finne hosten når jeg legger på katalogene...

 

Feilmelding:

 

Warning: fsockopen() [function.fsockopen]: php_network_getaddresses: getaddrinfo failed: Name or service not known in www/adm/xmltest.php on line 3

 

Warning: fsockopen() [function.fsockopen]: unable to connect to www.domene.no/XMLServices/UserDirUpdates:443 (Unknown error) in www/adm/xmltest.php on line 3

(8)

 

 

Hva i alle dager må jeg gjøre for å få løst dette... noen som har noen alternativer til meg, så er jeg EVIG takknemmelig..

Lenke til kommentar

hvis du bruker "Connection: Keep-Alive\r\n" så kanskje det er håp. Akkurat nå tror jeg du avslutter tilkoblingen når pakken er mottatt.

 

Redigert: Du ser ut til å ha løst det selv. Det kan være en ide at du poster koden du har. Alle vi andre tenker ikke likt som deg, og har derfor litt problemer med å vite hva koden din er? ;)

 

Redigert 2: Legg på / tilslutt i adressen. Serveren kan tro at du leter etter fila UserDirUpdates og ikke mappa.

Endret av Ernie
Lenke til kommentar

Fungerte ikke å legge på / til slutt i url'n..

Lagt til connection Keep-Alive.. :)

 

 

koden min er nå slik:

function doPost($uri,$postdata,$host){
$da = fsockopen($host, 443, $errno, $errstr, 5);
if (!$da) {
  echo "$errstr ($errno)<br/>\n";
  echo $da;
}
else {
  $salida ="POST $uri  HTTP/1.1\r\n";
  $salida.="Host: $host\r\n";
  $salida.="User-Agent: PHP Script\r\n";
  $salida.="Content-Type: application/x-www-form-urlencoded\r\n";
  $salida.="Connection: Keep-Alive\r\n";
  $salida.="Content-Disposition: form-data; name=\"xml\"\r\n;";
  $salida.="Content-Length: ".strlen($postdata)."\r\n";
  $salida.="Connection: close\r\n\r\n";
  $salida.=$postdata;
  fwrite($da, $salida);
     while (!feof($da))
   $response.=fgets($da, 128);
  $response=split("\r\n\r\n",$response);
  $header=$response[0];
  $responsecontent=$response[1];
  if(!(strpos($header,"Transfer-Encoding: chunked")===false)){
   $aux=split("\r\n",$responsecontent);
   for($i=0;$i<count($aux);$i++)
   	if($i==0 || ($i%2==0))
     $aux[$i]="";
   $responsecontent=implode("",$aux);
  }//if
  return chop($responsecontent);
}//else
}//function-doPost
$xml = '<?xml version="1.0" encoding="ISO-8859-1" ?>
<dist_update>
 <reset userid="gulsta" password="sg"/>
 <nedepartment parent="gulsta" id="8" name="Test firma" address="Testadresse" postaladdress="Testpoststed" postnumber="1212" telephone="98798798" telefax="98765498" contact=" Test" email="[email protected]" orgnr="123123123" kill="0"  />
 <neuser parent="gulsta" id="8" name=" Test" username="testing123" password="testing123" email="[email protected]" kill="0" />
</dist_update>';
$retur = doPost($_SERVER['SCRIPT_NAME'], $xml,"www.domene.no/XMLServices/UserDirUpdates/");
echo $retur;

 

Fortsatt samme feilemlding:

Warning: fsockopen() [function.fsockopen]: php_network_getaddresses: getaddrinfo failed: Name or service not known in /www/adm/xmltest.php on line 3

 

Warning: fsockopen() [function.fsockopen]: unable to connect to www.domene.no/XMLServices/UserDirUpdates/:443 (Unknown error) in /www/adm/xmltest.php on line 3

(8)

Lenke til kommentar

Tenkte Keep-Alive i stedet for close da ;)

Uannsett, virker som den ikke finner serveren. Rettere sagt ikke får noe DNS-oppslag på host :hmm: Hvis mulig, prøv å bruk IP-adressen på serveren og se om det hjelper. Gjør det det, så er problemet DNS. Hjelper det derimot ikke så er ikke domenet i rota på http-serveren eller rett og slett ikke DNS-relatert aka. problemet er et annet sted.

Endret av Ernie
Lenke til kommentar

:blush: Fant ut hva som var problemet, men fått nok et nytt et.. hehe

 

hadde en skrivefeil i domenet, så da funka det dårlig. Nå får jeg respons fra serveren, men den sier at den "Mangler xml input".

XML stringen skal sendes med parameternavn xml, og jeg trodde det var "Content-Disposition: form-data; name="xml"\r\n" som fikset det, men den aksepterer ikke det.

Lenke til kommentar

Nå husker jeg ikke hvordan oppbygningen i HTTP-protokoellen er for akkurat det der, men mener du må gjøre noe slikt: xml=data

Data må i dette tilfellet være kjørt igjennom urlencode().

 

Rettelse: urlencode, ikke url_encode. Forøvrig, hvis du bruker ethereal e.l så finner du fort ut hvordan det skal være. Nå har jeg ikke tilgang til det her så jeg får ikke dobbeltsjekket :)

Endret av Ernie
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...