[XML & PHP] XML data POST naar een andere SERVER

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het probleem is dat ik het niet voor elkaar kan krijgen om een XML bestand naar een server te posten.
Deze code gebruik ik nu:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php $this_header = array("MIME-Version: 1.0", "Content-Type: multipart/related; type=\"text/xml\"", "Content-transfer-encoding: text");
$file1 = "test.xml";

//hier komt de url van de ontvanger
$ch = curl_init("https://www.transip.nl/api/xml");

//checkt of de SSL certificaat geldig is
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);

curl_setopt($ch, CURLOPT_HTTPHEADER, $this_header);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $file1);

//hier komt de output van de script
echo $pnp_result_page = curl_exec($ch);
//naja dit is duidelijk
curl_close($ch);
?> 


Ik weet bijna wel zeker dat het bestand niet goed verzonden wordt, maar ik zie geen oplossing meer, ik hoop dat iemand alhier mij kan helpen.

De foutmelding die ik krijg is:
HTTP/1.1 200 OK Date: Mon, 04 Jul 2005 19:43:18 GMT Server: Apache/1.3.33 Transfer-Encoding: chunked Content-Type: application/xml 42c9915655775 Mon, 04 Jul 2005 21:43:18 +0200 transip/3.2 api/20050704 0.02 ERROR 600 XML data missing 1

bvd

[ Voor 13% gewijzigd door Verwijderd op 04-07-2005 21:46 . Reden: onnodige text in php verwijderd ]


Acties:
  • 0 Henk 'm!

  • foske
  • Registratie: Juli 2001
  • Laatst online: 08:20
Is het niet zo dat je gebruik moet maken van SOAP om XML van de ene server naar de ander?
Ik heb nog niet gezien dat mensen direct XML posten.


Daarnaast, als het wel kan, lijkt het me zowiezo een goed idee om te kijken naar soap. Omdat dit de communicatie waarschijnlijk stukken makkelijker kan maken.

Als je niet gebruik maakt van PHP5, moet je maar eens kijken naar de nusoap toolkit.

succes

Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Je gebruikt nu voor je CURLOPT_HTTPHEADER een array, denk dat je daar even een string van moet maken? (implode() of als string opslaan).


edit: de het ... certificaat
de het script ;)

[ Voor 27% gewijzigd door r0bert op 05-07-2005 02:19 ]


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Misschien ook even aangeven dat het om een POST gaat?

CURLOPT_POST

Bovendien post je nu de string 'test.xml' en geen daadwerkelijke XML. Bovendien werkt POSTFIELDS niet zo... je post je domweg 'test.xml' als POST data, geen argumentnaam, geen xmldata...

http://nl3.php.net/manual/en/function.curl-setopt.php

[ Voor 65% gewijzigd door Bosmonster op 05-07-2005 09:26 ]


Acties:
  • 0 Henk 'm!

  • kroeske
  • Registratie: Mei 2000
  • Laatst online: 05-06 09:27
Ik heb hiervoor een class gemaakt die wellicht ook handig voor servers zonder curl support.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<?
/*
USAGE:
$aim4mclient = new HTTP_Client("host adres",80,5);
$aim4mclient->set_path("path and filename");
$aim4mclient->post_data = "string to send";
echo $aim4mclient->send_request(); //echo the result
*/
class HTTP_Client { 
    var $host; 
    var $port; 
    var $socket; 
    var $errno ; 
    var $errstr; 
    var $timeout; 
    var $buf; 
    var $result; 
    var $postData; 
    var $path; 
    var $path = "/"; 
    var $userAgent = "Mozilla/5.0";
    var $debug = 0; //set to 1 to enable debug information to be shown
    var $msg;
    
    function HTTP_Client($host, $port, $timeout) 
    { 
    $this->host = $host; 
    $this->port = $port; 
    $this->timeout = $timeout; 
    if($this->debug == true) echo "Debugging enabled.<br />\n";
    } 
    
    function connect() { 
        $this->socket = @fsockopen($this->host, $this->port, $this->errno, $this->errstr, $this->timeout); 
        if($this->debug ==  true) echo $this->errno.": ". $this->errstr;
        if(!$this->socket) { 
            if($this->debug ==  true) echo "Connection to ".$this->host." on port: ".$this->port." failed.<br />\n The following error occured: #".$this->errno.": ".$this->errstr."<br />\n Timeout is ".$this->timeout." seconds.<br />";
            return false; 
        } else  { 
            if($this->debug ==  true) echo "Connection to ".$this->host." established.<br />\n";
            return true; 
        }
    } 
    
    function set_path($path) { 
        $this->path = $path; 
        if($this->debug ==  true) echo "Path set to". $this->path ."<br />\n";
    } 
    
    function send_request() { 
        if(!$this->connect()) { 
            if($this->debug == true) echo "No connection available to send request to.<br />\n";
            return false; 
        } else { 
            $this->result = $this->request($this->postData);
            if($this->debug ==  true) echo "Request send.<br />\n";
            return $this->result; 
        } 
    } 
    
    function request($postData) { 
        $this->buf = ""; 
        $this->msg = "POST ".$this->path." HTTP/1.1\r\n". 
            "Host:".$this->host."\r\n". 
            "User-Agent:".$this->userAgent."\r\n".
            "Content-Type: application/x-www-form-urlencoded; charset=UTF-8   \r\n". 
            "Content-Length: ".strlen($postData)."\r\n".
            "\r\n".$postData."\r\n"; 
        
        fwrite($this->socket, $this->msg); 
        if($this->debug ==  true) echo "String send to host.<br /><blockquote>".nl2br(htmlspecialchars($this->msg))."</blockquote>\n";
        while(1){
            $packet=fread($this->socket,8192);
        $this->buf.=$packet;
        if(substr($packet,-7)=="</ROOT>")break;
    }
        if($this->debug ==  true) echo "Answer received.<br />\n"; 
        $this->close(); 
        return $this->buf; 
    } 
    
    function close() { 
        fclose($this->socket); 
        if($this->debug ==  true) echo "Connection closed.<br />\n";
    } 
} 
?>

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
oke, iedereen toch bedankt, maar ik ben er zelf al uitgekomen.. hier volgt mijn script:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$ch = curl_init();
$file1 = implode('', file('test.xml'));

curl_setopt($ch, CURLOPT_URL, "https://www.transip.nl/api/xml");
curl_setopt($ch, CURLOPT_POSTFIELDS, $file1);

$script = curl_exec($ch);

curl_close($ch);

print $script;
?> 

[ Voor 27% gewijzigd door Verwijderd op 05-07-2005 14:33 ]

Pagina: 1