Post request als ersatz für Formular mit action=anderer Server

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Post request als ersatz für Formular mit action=anderer Server

    Hallo zusammen,

    Folgendes Problem

    Ich habe als Schnittstelle ein HTML Formular das eine Datei(input type=file) und den Value des Submitbuttons an einen entfernten Server mittels Post überträgt.

    PHP-Code:
    <html>
       <
    form 
       name
    ="FilePost" 
       
    action="https://anderer.Server.im/Internet"
       
    method="post" enctype="multipart/form-data"
       
    target="_blank">
      <
    input type="file" name="data" size="30">
      <
    input type="submit" value="Versenden" name="submitButtonName">
      </
    form>
     </
    body>
    </
    html
    Mein Problem ist es das ganze jetzt ohne ein HTML Formular zu erstellen. Ich suche jetzt quasi eine Methode ein HTML Formular in PHP zu simulieren.

    Mein Ansatz ist dies über die php header() funktion zu realiesieren
    PHP-Code:
    <?php
    $data    
    =    urlencode(file_get_contents('000001.txt'));
    #echo $data;
    header("POST /XXXXXX/XXXX HTTP/1.1\n");
    header("Host: www.XXXXXXX.de\n");
    header("Location: https://www.XXXXXX/XXXXX/\n");
    header("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3\n");
    header("Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\n");
    header("Accept-Language: de\n");
    header("Accept-Encoding: gzip,deflate\n");
    header("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\n");
    header("Keep-Alive: 300\n");
    header("Connection: keep-alive\n");
    header("Referer: http://localhost/XXXXXXXX/test.php\n");
    header("Content-Type: multipart/form-data; boundary=---------------------------19560126289750\n");
    header("Content-Length: 3476\n");
    header("-----------------------------19560126289750\n");
    header("Content-Disposition: form-data; name=\"data\"; filename=\"000001.txt\"\n");
    header("Content-Type: text/plain\n\n");

    header($data "\n");

    header("-----------------------------19560126289750\n");
    header("Content-Disposition: form-data; name=\"submitButtonName\"\n\n");
    header("Versenden\n");
    header("-----------------------------19560126289750--\n");

    ?>
    Das funktionier aber anscheinend nicht richtig.

    Hat jemand eine Idee und könnte mir weiterhelfen.

    Danke im voraus.
    "Nicht jeder Mensch kann und soll Programmieren[...]".

  • #2
    http://faq-php.de/q/q-code-post.html

    bei phpclasses.org gibt es aber auch bestimmt fertige wrapper für solche angelegenheiten.

    Kommentar


    • #3
      Das Problem hier ist hierbei, das ich den HTTP Response nicht mit dem Browser verarbeiten kann. dies ist aber wichtig für die anzeige der generierten Daten die der 2. Server temporär erstellt.

      wie halt bei dem HTML Formular.
      "Nicht jeder Mensch kann und soll Programmieren[...]".

      Kommentar


      • #4
        warum nicht?

        Kommentar


        • #5
          Hm... beschreib doch mal, was genau du machen willst.

          Wieso kannst Du den Request nicht von PHP aus machen - und dann zur Seite übertragen? Für ganz hartgesottene kann man das auch per Ajax machen.

          Aber wie gesagt - beschreibe doch mal was genau Du vor hast.
          Tutorials, Tipps und mehr.

          Kommentar


          • #6
            Original geschrieben von guxx
            Hm... beschreib doch mal, was genau du machen willst.

            Wieso kannst Du den Request nicht von PHP aus machen - und dann zur Seite übertragen? Für ganz hartgesottene kann man das auch per Ajax machen.

            Aber wie gesagt - beschreibe doch mal was genau Du vor hast.
            Also im Grunde muss ich den Datensatz der in der Datei steht an den Server übermitteln, der wiederum meine Daten verarbeitet und daraus PDF Dateien generiert. Darum ist auch das action=https://XXXXXXX.de/XXX/XXX wichtig. Damit diese PDF Datei nicht verworfen wird. Die Generierte PDF soll dann vom Client gedruckt werden. Die Technik der anderen Seite kenne ich nicht. Das HTML Formular funktioniert wunderbar, ist nur viel zu Umständlich und die Daten mussen vom Server kommen und nicht wie beim input type=file vom Client.
            Das Problem ist es das ich es nicht schaffe den Response(Antwort) zu verarbeiten. Wenn jemand weiß wie ich das dem Browser sagen soll, nur zu .
            "Nicht jeder Mensch kann und soll Programmieren[...]".

            Kommentar


            • #7
              Wenn jemand weiß wie ich das dem Browser sagen soll, nur zu
              Wieso im Browser ? Der User schickt das Form an Server A. Dieser öffnet einen Socket zu Server B und schickt ihm die Daten via POST Request. Server B verarbeitet die Daten daraufhin und schickt die gewünschte Antwort an Server A. Server A bereitet diese Antwort entsprechend auf und übergibt sie dem Browser.
              That's it
              fsockopen()
              fgets()
              fputs()
              helfen bei solchen Vorhaben ungemein oder du verwendest wie bereits vorgeschlagen eine fertige Klasse...

              Gruss

              tobi
              Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

              [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
              Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

              Kommentar


              • #8
                Ich habe es jetzt über fsockopen() fputs() feof() fread() gemacht.

                Bekomme folgenden Response:

                Code:
                HTTP/1.0 302 Moved Temporarily
                Server: "Webserver"
                Date: Thu, 31 May 2007 08:56:49 GMT
                Content-Type: text/html
                P3P: CP="NOI CUR OUR STP"
                Location: https://www.XXXXX.de/YYYYY/YYYYY/0,,,00.html
                Content-Length: 0
                X-Cache: MISS from ABC.ABCDE
                Via: 1.0 ABC.ABCDE:800 (squid/2.6.STABLE9)
                Connection: close
                Wie lasse ich jetzt den Webserver/Browser darauf reagieren.
                "Nicht jeder Mensch kann und soll Programmieren[...]".

                Kommentar


                • #9
                  Original geschrieben von xkl1986
                  Wie lasse ich jetzt den Webserver/Browser darauf reagieren.
                  Da das eine Weiterleitung ist, folgst du der vermutlich am besten erst mal [1] - sonst hast du nämlich gar keine Daten ...

                  Und wenn du dann die Daten hast - dann gibst du sie an den Client weiter.



                  [1] Dass das mit fertigen Klassen einfacher ginge, möchte ich jetzt nicht noch mal wiederholen.
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    entweder denke ich zu kompliziert oder ich bin zu blöd
                    "Nicht jeder Mensch kann und soll Programmieren[...]".

                    Kommentar


                    • #11
                      überlasse die entscheidung keinen foren-besuchern.

                      Kommentar


                      • #12
                        Du musst erst den Serverstatus feststellen. Normalerweise wird ein Webserver mit OK 200 auf eine erfolgreiche Anfrage reagieren. Wenn dieser Status nicht vorkommt musst du erst feststellen ob ein Location Redirect angegeben wird. Auf den Wert bei Location setzt du eine neue Abfrage ab.

                        Gruss

                        tobi
                        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                        Kommentar


                        • #13
                          Das Problem ist es wenn ich das HTML Formular benutze, bekomme ich keinen Statuscode 302 sonder ich befinde mich dann auf dem zweiten Server und alles wird da verarbeitet. Wenn es nur um den Daten versand gehen würde hätte ich die Lösung ja schon. Nur die Serverseitigeverarbeitung auf dem anderenServer ist das Problem darum ja auch
                          Code:
                          action="https://anderer.Server.im/Internet"
                          wichtig da ich nach abschicken des Formulares auf dem anderen Server befinde.

                          Dies sind die HTTP HEADER die vom Formular ausgehen.
                          Code:
                          POST /XXXX/XXXX/XXX HTTP/1.1
                          Host: www.XXXXXX.de
                          User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4
                          Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
                          Accept-Language: de
                          Accept-Encoding: gzip,deflate
                          Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
                          Keep-Alive: 300
                          Connection: keep-alive
                          Referer: http://localhost/XXXXXX/pdf_test_live.htm
                          Cookie: WT_FPC=id=XXXXXXXXXXXXXXXXXXXXXXXXX
                          Content-Type: multipart/form-data; boundary=---------------------------28569369125971
                          Content-Length: 3476
                          -----------------------------28569369125971
                          Content-Disposition: form-data; name="data"; filename="000001.txt"
                          Content-Type: text/plain
                          
                          2DATENSÄTZE
                          -----------------------------28569369125971
                          Content-Disposition: form-data; name="submitButtonName"
                          
                          Versenden
                          -----------------------------28569369125971--
                          
                          HTTP/1.x 200 OK
                          Server: "Webserver"
                          Date: Fri, 01 Jun 2007 08:36:28 GMT
                          Content-Type: text/html; charset=iso-8859-1
                          P3P: CP="NOI CUR OUR STP"
                          Pragma: No-cache
                          Transfer-Encoding: chunked
                          Via: 1.1 XXXXXXXXXXXXXXX (Alteon iSD-SSL/5.1.3)
                          Zuletzt geändert von xkl1986; 01.06.2007, 09:42.
                          "Nicht jeder Mensch kann und soll Programmieren[...]".

                          Kommentar


                          • #14
                            Das Problem ist es wenn ich das HTML Formular benutze, bekomme ich keinen Statuscode 302 sonder ich befinde mich dann auf dem zweiten Server und alles wird da verarbeitet.
                            du hast keinen plan, wie http funktioniert, oder?

                            im grunde wurde deine frage schon beantwortet, lies den thread noch mal durch.

                            Kommentar


                            • #15
                              Original geschrieben von penizillin
                              du hast keinen plan, wie http funktioniert, oder?

                              im grunde wurde deine frage schon beantwortet, lies den thread noch mal durch.
                              Ja klar weiß ich wie http funktioniert!

                              aber entweder versteht ihr nicht mein Problem nicht oder ich steh aufm Schlauch.
                              "Nicht jeder Mensch kann und soll Programmieren[...]".

                              Kommentar

                              Lädt...
                              X