xml file an server posten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • xml file an server posten

    Hi zusammen,

    Ich möchte gerne mit einem entfernten Server kommunizieren, hierfür möchte ich PHP5 nutzen. Laut dessen Anleitung benötigt er die übergebenen Daten folgendermaßen:

    "Fax messages shall be submitted using an http form post (content-type text/xml) to provider.net/xml2fax/1.1/send.asp. The https post shall contain a XML
    document conforming to the DTD specified below. Each upload request consists of a single
    XML file"

    Dann gibt es noch eine DTD

    <?xml version="1.0" encoding="UTF-8"?>
    <!ELEMENT outbound (recipient+, document+)>
    <!ATTLIST outbound
    customer-id CDATA #REQUIRED
    auth-method (plain | basic | digest) #REQUIRED
    auth-string CDATA #REQUIRED
    confirmation-url CDATA ""
    csid CDATA ""
    user-id CDATA ""
    header CDATA ""
    subject CDATA ""
    date CDATA ""
    retries CDATA ""
    user-id-name CDATA ""
    resolution CDATA "">
    <!ELEMENT recipient EMPTY>
    <!ATTLIST recipient
    transaction-id CDATA "0"
    name CDATA ""
    company CDATA ""
    destination CDATA #REQUIRED>
    <!ELEMENT document (#PCDATA)>
    <!ATTLIST document
    content-type CDATA "text/html"
    content-transfer-encoding CDATA "base64">


    und natürlich ein Beispiel XML

    Quellcode

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <!DOCTYPE outbound
    3. SYSTEM "http://provider.net/xml2fax/1.1/outbound.dtd">
    4. <outbound
    5. customer-id="999999999"
    6. auth-method="basic"
    7. auth-string="ueDhrvGt1rfq1q9qvvutwpauepmifn"
    8. user-id=”Marketing Dept.”
    9. header=”ACME INC.”
    10. confirmation-url="mailto://temp@tempuri.org">
    11. <recipient
    12. transaction-id="b31b8793-abaf-11d5-c450-c7fcf46a01f5"
    13. name="John Doe"
    14. company="Doe-A-Deer, Inc"
    15. destination=”15551239876”/>
    16. <document
    17. content-type="text/html"
    18. content-transfer-encoding="base64">
    19. gyutmtizndvyqfbktcbtrvqguefhrvbst1rfq1q9qvvutwpauepmifnfv....
    20. </document>
    21. </outbound>
    Alles anzeigen


    Ich habe es mit curl versucht, auch mit normalem post formular, und selbst mit simpleXML habe ich mich geplagt, aber irgendwie hakt es, kann mir jemand weiterhelfen?

    Merci vorab,
    Grüße,
    Matthias
    Das Leben ist binär - du bist eine 1, oder eine 0
  • Hi
    Von SimpleXML würde ich erstmal absehen und das ganze stattdessen direkt als String bzw Datei senden.

    Beispiel:

    Quellcode

    1. $ch = curl_init();
    2. curl_setopt($ch, CURLOPT_URL, "http://www.example.com");
    3. curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml"));
    4. curl_setopt($ch, CURLOPT_POST, true);
    5. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    6. curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents('dein xml dokument'));
    7. $antwort= curl_exec($ch);
    8. curl_close ($ch);
  • Moin zusammen,

    Danke für die Hilfe d0nut - aber ich bekomme auch mit deinem Code die alte Antwort "access denied" - das liegt aber nicht an falschen Zugangsdaten sondern daran das er mit meinen übergebenen Daten ein Problem hat, er kann Sie nicht lesen.
    Ich weiß nicht wirklich weiter, nicht mal wie ich um Hilfe fragen soll.

    Hier nochmal mein derzeitiger Code:

    Hier mein XML File welches ich dem CURL mitgebe:

    Quellcode

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <!DOCTYPE outbound
    3. SYSTEM "http://webservices.provider.net/xml2fax/1.1/outbound.dtd">
    4. <outbound
    5. customer-id="999999999"
    6. auth-method="basic"
    7. auth-string="ueDhrvGt1rfq1q9qvvutwpauepmifn"
    8. user-id=”Marketing Dept.”
    9. header=”ACME INC.”
    10. confirmation-url="mailto://temp@tempuri.org">
    11. <recipient
    12. transaction-id="b31b8793-abaf-11d5-c450-c7fcf46a01f5"
    13. name="John Doe"
    14. company="Doe-A-Deer, Inc"
    15. destination=”15551239876”/>
    16. <document
    17. content-type="text/html"
    18. content-transfer-encoding="base64">
    19. gyutmtizndvyqfbktcbtrvqguefhrvbst1rfq1q9qvvutwpauepmifnfv....
    20. </document>
    21. </outbound>
    Alles anzeigen


    Und hier das PHP Script welches ich im Browser öffne:

    Quellcode

    1. <?
    2. $ch = curl_init();
    3. curl_setopt($ch, CURLOPT_URL, "http://webservices.provider.net/xml2fax/1.1/send.asp");
    4. curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml"));
    5. curl_setopt($ch, CURLOPT_POST, true);
    6. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    7. curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents('request.xml'));
    8. $antwort= curl_exec($ch);
    9. curl_close ($ch);
    10. var_dump($antwort);
    11. var_dump(file_get_contents('request.xml'));
    12. ?>
    Alles anzeigen


    Die Antwort des Servers lautet immer:

    string(19) "Access is denied. " string(624) " gyutmtizndvyqfbktcbtrvqguefhrvbst1rfq1q9qvvutwpauepmifnfv.... "

    Für mich sieht es so aus als wäre das XML das ich ihm gebe nicht valide ... sollte es aber sein, denn es ist das original aus der Anleitung des Herstellers der den XML Server vorhält. Ich checks wahrscheinlich einfach mal nur nicht, weiß noch jemand weiter?

    Grüße,
    Matze
    Das Leben ist binär - du bist eine 1, oder eine 0
  • zumindest sehen die Windows Anführungszeichen bei user-id und header, wie du sie hier sehr schön grün hervorgehoben bekommst, sehr nach einem falschen Zeichensatz aus.

    Ich würde einfach mal beim Webservice Provider anfragen.
    Die können das über ihre Logfiles bestimmt einfach herausfinden.
    Und auch werden sie schon öfter in Kontakt mit PHP Clients gekommen sein.

    Lg