[PHP] Verwijderen van headers

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • eX0duS
  • Registratie: Juni 2001
  • Laatst online: 20-09 23:24
Het uiteindelijke doel is om een XML bestand te versturen via POST wat ook weer een XML bestand terug geeft, dit lijkt goed te gaan en krijg ook relevante data terug.
Alleen de data die terug komt bevat uiteraard ook de headers, maar deze worden bij een echo ook weer gegeven.
Ik wil dus puur en alleen het terug gekregen XML bestand hebben, maar kan niks vinden op dit deel van de headers te splitsen.

Kan iemand een duw in de goede richting geven?

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:34
Headers zijn toch vrij goed te splitsen van de content van een bestand (alle browsers en mailrprogramma's kunnen het ;) ). Ik heb vrij weinig zin om voor jouw rfc's in te duiken wat er precies gedefinieerd is. Maar als je een voorbeeld post van wat er ge-echoed wordt (alleen de overgang headers -> content) dan kunnen we het misschien zo wel zien...

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • Huppie
  • Registratie: Mei 2003
  • Laatst online: 02-09 09:59
Je bent nou niet echt specifiek, misschien dat je eens naar de quickstart moet kijken ;).

Verder kan je de informatie uit het xml bestand bewerken en / of matchen met behulp van de Regular Expression Functions :).

Zou zou je de headers eraf kunnen knippen met preg_replace().

Proud member of TCF - D2OL is zooooo 2005


Acties:
  • 0 Henk 'm!

  • HawVer
  • Registratie: Februari 2002
  • Laatst online: 13-09 16:51
eX0duS schreef op dinsdag 31 mei 2005 @ 11:59:
Het uiteindelijke doel is om een XML bestand te versturen via POST wat ook weer een XML bestand terug geeft, dit lijkt goed te gaan en krijg ook relevante data terug.
Alleen de data die terug komt bevat uiteraard ook de headers, maar deze worden bij een echo ook weer gegeven.
Ik wil dus puur en alleen het terug gekregen XML bestand hebben, maar kan niks vinden op dit deel van de headers te splitsen.

Kan iemand een duw in de goede richting geven?
Hoe ziet het xml bestand eruit? En waarom zou je een xml bestand echo-en? Misschien kun je gebruik maken van een xml parser?

[ Voor 4% gewijzigd door HawVer op 31-05-2005 12:21 ]

http://hawvie.deviantart.com/


Acties:
  • 0 Henk 'm!

  • eX0duS
  • Registratie: Juni 2001
  • Laatst online: 20-09 23:24
T-MOB schreef op dinsdag 31 mei 2005 @ 12:06:
Headers zijn toch vrij goed te splitsen van de content van een bestand (alle browsers en mailrprogramma's kunnen het ;) ). Ik heb vrij weinig zin om voor jouw rfc's in te duiken wat er precies gedefinieerd is. Maar als je een voorbeeld post van wat er ge-echoed wordt (alleen de overgang headers -> content) dan kunnen we het misschien zo wel zien...
Een hint de goede richting in is al voldoende, je hoeft ook geen meuk te lezen/begrijpen ;)

Maar het probleem is juist dat er geen overgang te herkennen is... :|

Dit is de header van de echo:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
HTTP/1.1 200 OK
Date: Tue, 31 May 2005 11:02:32 GMT
Server: Apache/1.3.33 (Unix) PHP/4.3.11 mod_gzip/1.3.19.1a
X-Powered-By: PHP/4.3.11
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Last-Modified: Tue, 31 May 2005 11:02:32 GMT
Cache-Control: no-store, no-cache, must-revalidate
Cache-Control: post-check=0, pre-check=0
Pragma: no-cache
Connection: close
Transfer-Encoding: chunked
Content-Type: text/xml;charset=iso-8859-15

62a2
<?xml version="1.0" encoding="ISO-8859-15"?>


Uiteraard verschillende headers van host/website, daardoor is RegExp geen optie :)
HawVer schreef op dinsdag 31 mei 2005 @ 12:20:
[...]

Hoe ziet het xml bestand eruit? En waarom zou je een xml bestand echo-en? Misschien kun je gebruik maken van een xml parser?
Omdat Server A een XML bestand POST naar Server B.
Server B geeft dan een XML bestand weer.

De echo gebruik ik nu als controle, of wil je zeggen dat een XML parser de header zelf afhandeld?

[ Voor 23% gewijzigd door eX0duS op 31-05-2005 13:11 ]


Acties:
  • 0 Henk 'm!

  • Kayshin
  • Registratie: Juni 2004
  • Laatst online: 09-03-2018

Kayshin

Bl@@T @@P!!!

Als je een xml-parser gebruikt, loopt hij alle xml-tags langs. En volgens mij staan deze niet in de header.

My personal videoteek: -Clique-; -NMe- is een snol!


Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Alles strippen totaan het eerste '<' ?
PHP:
1
2
//Geef alles na de eerste '<' : 
substr($data, strpos('<'), strlen($data)) ?

http://nl2.php.net/manual/nl/function.substr.php
http://nl2.php.net/manual/nl/function.strpos.php
http://nl2.php.net/manual/nl/function.strlen.php

[ Voor 107% gewijzigd door AtleX op 31-05-2005 13:13 ]

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • eX0duS
  • Registratie: Juni 2001
  • Laatst online: 20-09 23:24
Kayshin schreef op dinsdag 31 mei 2005 @ 13:11:
Als je een xml-parser gebruikt, loopt hij alle xml-tags langs. En volgens mij staan deze niet in de header.
Die kans is vrij groot, maar het lijkt mij een stuk netter om een XML bestand te parsen zoals het bestand eruit ziet en dat is zonder HTTP headers.
AtleX schreef op dinsdag 31 mei 2005 @ 13:12:
Alles strippen totaan het eerste '<' ?
PHP:
1
2
//Geef alles na de eerste '<' : 
substr($data, strpos('<'), strlen($data)) ?
En wat als iemand in de HTTP header dat teken zet? ;)
(Denk aan cookies, etc)

[ Voor 31% gewijzigd door eX0duS op 31-05-2005 13:13 ]


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:34
AtleX schreef op dinsdag 31 mei 2005 @ 13:12:
Alles strippen totaan het eerste '<' ?
Ik weet niet of een kleiner dan teken verboden is in een header. Maar splitten op '<?xml' lijkt me sowieso veilig..

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • nescafe
  • Registratie: Januari 2001
  • Laatst online: 22:40
Volgens mij kan een HTTP header geen witregel bevatten, en zou je daar wel eens op kunnen splitten :)

* Barca zweert ook bij fixedsys... althans bij mIRC de rest is comic sans


Acties:
  • 0 Henk 'm!

Verwijderd

Klopt het filteren op \n\n (of \n\r\n\r, dat weet ik niet meer zeker).

zelf ooit een xml parser moeten maken :)

Acties:
  • 0 Henk 'm!

  • eX0duS
  • Registratie: Juni 2001
  • Laatst online: 20-09 23:24
Maar na die witregel staan nog wat karakters, waarvan me het onduidelijk is wat die daar doen :+
'62a2'

Maar splitsen op <xml is een mogelijkheid, maar vind het op de een of andere manier er niet net uitzien.
Maar als het niet anders kan moet het maar ;)

Acties:
  • 0 Henk 'm!

  • eX0duS
  • Registratie: Juni 2001
  • Laatst online: 20-09 23:24
Verwijderd schreef op dinsdag 31 mei 2005 @ 13:23:
Klopt het filteren op \n\n (of \n\r\n\r, dat weet ik niet meer zeker).

zelf ooit een xml parser moeten maken :)
Ook al geprobeerd, maar de volgorde van de \n en \r en de hoeveelheid ervan vreschillen :|

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 20-09 22:44

MBV

Pak je niet de verkeerde variabele? Kan je niet met $_POST['xml'] werken? De headers ervanaf halen is namelijk iets wat ik nog nooit in PHP heb hoeven doen...

Acties:
  • 0 Henk 'm!

  • eX0duS
  • Registratie: Juni 2001
  • Laatst online: 20-09 23:24
MBV schreef op dinsdag 31 mei 2005 @ 13:29:
Pak je niet de verkeerde variabele? Kan je niet met $_POST['xml'] werken? De headers ervanaf halen is namelijk iets wat ik nog nooit in PHP heb hoeven doen...
Jij hebt het over de verkeerde plaats, de ontvangen data is correct. Maar de data die terug komt aan de hand van dat is het probleem ;)

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:34
eX0duS schreef op dinsdag 31 mei 2005 @ 13:24:
Maar na die witregel staan nog wat karakters, waarvan me het onduidelijk is wat die daar doen :+
'62a2'
Dat ziet er uit als (de resten van) een Byte Order Mark, een code die in unicode wordt gebruikt om de codering aan te geven. (zie ook Jaap3 in [php] probleem sinds gebruik Mac). Blijkbaar is er op de server die de XML serveert iets niet helemaal lekker geconfigureerd en wordt er daar intern wel gewerkt met UTF-8 of -16.

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • Jimbolino
  • Registratie: Januari 2001
  • Laatst online: 20-09 08:54

Jimbolino

troep.com

split gewoon je string op bij "<?xml" de kans is niet zo groot dat dat in je header voorkomt...
(zie post AtleX)

[ Voor 17% gewijzigd door Jimbolino op 31-05-2005 14:18 ]

The two basic principles of Windows system administration:
For minor problems, reboot
For major problems, reinstall


Acties:
  • 0 Henk 'm!

  • nescafe
  • Registratie: Januari 2001
  • Laatst online: 22:40
eX0duS schreef op dinsdag 31 mei 2005 @ 13:24:
Maar splitsen op <xml is een mogelijkheid, maar vind het op de een of andere manier er niet net uitzien.
Maar als het niet anders kan moet het maar ;)
Het ziet er idd ranzig uit, ik zou ook splitten op de newline. Waarom? Omdat het zo hoort.
De newline bevat dus \r\n op een new line, of een single \r of single \n.
Met een beetje regex kun je hier toch wel op splitten?

* Barca zweert ook bij fixedsys... althans bij mIRC de rest is comic sans


Acties:
  • 0 Henk 'm!

  • PanMan
  • Registratie: November 1999
  • Laatst online: 18-09 22:50

PanMan

Spun!

Hoe post je die XML? Met een eigen scriptje dat naar poort 80 connect? Een andere optie zou nl. zijn om b.v. Curl te gebruiken, dat geeft standaard al geen headers weer (tenzei je wil dat het wel gebeurt). Curl is beschikbaar als module in PHP.
Anders zal je moeten splitsten op twee newlines, dat is de definitie van het eind van je header, als ik het me goed herinner.

Where a calculator on the ENIAC is equipped with 18,000 vacuum tubes and weighs 30 tons, computers in the future may have only 1,000 vacuum tubes and weigh only 1.5 tons.
– Popular Mechanics, March 1949


Acties:
  • 0 Henk 'm!

  • eX0duS
  • Registratie: Juni 2001
  • Laatst online: 20-09 23:24
PanMan schreef op dinsdag 31 mei 2005 @ 16:08:
Hoe post je die XML? Met een eigen scriptje dat naar poort 80 connect? Een andere optie zou nl. zijn om b.v. Curl te gebruiken, dat geeft standaard al geen headers weer (tenzei je wil dat het wel gebeurt). Curl is beschikbaar als module in PHP.
Anders zal je moeten splitsten op twee newlines, dat is de definitie van het eind van je header, als ik het me goed herinner.
XML gaat inderdaad via poort 80 met behulp van fsockopen().
Curl vind ik weer een beperking voor het geval dit niet op een webserver mogelijk is.
Wil er namelijk voor zorgen dat het zo veel mogelijk bruikbaar is :)

Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
nescafe schreef op dinsdag 31 mei 2005 @ 14:48:
[...]

Het ziet er idd ranzig uit, ik zou ook splitten op de newline. Waarom? Omdat het zo hoort.
De newline bevat dus \r\n op een new line, of een single \r of single \n.
Met een beetje regex kun je hier toch wel op splitten?
regex is niet de juiste methode. een regex is traag en overkill.

Een simpele
PHP:
1
$body = substr($rfc822_message,strpos($rfc822_message,"\r\n\r\n")+4);


is voldoende, er vanuit gaande dat \r\n ipv alleen \n als regeleinde gebruikt is.

zo niet dan werkt onderstaande.
PHP:
1
2
3
$rfc822_message = str_replace("\r\n","\n",$rfc822_message);
$rfc822_message = str_replace("\r","\n",$rfc822_message);
$body = substr($rfc822_message,strpos($rfc822_message,"\n\n")+2);

[ Voor 5% gewijzigd door stekkel op 31-05-2005 19:45 ]


Acties:
  • 0 Henk 'm!

  • Shadowman
  • Registratie: Januari 2002
  • Niet online
T-MOB schreef op dinsdag 31 mei 2005 @ 13:39:
[...]

Dat ziet er uit als (de resten van) een Byte Order Mark, een code die in unicode wordt gebruikt om de codering aan te geven. (zie ook Jaap3 in [php] probleem sinds gebruik Mac). Blijkbaar is er op de server die de XML serveert iets niet helemaal lekker geconfigureerd en wordt er daar intern wel gewerkt met UTF-8 of -16.
Ehm, het komt omdat de transfer-encoding op chunked staat ;). Het splitst de data, een beetje extra parsing van de data is dus wel nodig om de xml-file goed binnen te krijgen.

Acties:
  • 0 Henk 'm!

  • chielsen
  • Registratie: Oktober 2003
  • Laatst online: 23:33
Ik heb deze code voor een fsockopen 'contact', kan je ook voor andere manieren gebruiken:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$fp = @fsockopen($url, 80, $errno, $errstr, 5);
if($fp != false)
{               
    fwrite($fp, $header . "\r\n" . $args);  
    
    while(!feof($fp))
    {                   
        $data = fgets($fp, 1024);

        if(!$headerdone && strcmp($data, "\r\n") == 0)
            $headerdone = true; 

        elseif($headerdone) // header has been evaded
            $output .= $data;
    } 

    fclose($fp);
}
Pagina: 1