HTTP Post mit PHP (Stream Funktionen)

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

  • HTTP Post mit PHP (Stream Funktionen)

    Hallo,
    ich möchte mit PHP einen HTTP Post an einen entfernten Webserver senden. Hierzu habe ich folgenden Code geschrieben:

    function PostToHost($host, $path, $referer, $data_to_send) {
    $opts = array('ssl'=>array(
    'local_cert'=>"",
    'passphrase'=>"",
    'capath'=>"c:/2/"));
    $context = stream_context_create();
    $result = stream_context_set_option($context, 'ssl', 'local_cert', 'c:/2/userzertifikat.pem');
    $result = stream_context_set_option($context, 'ssl', 'passphrase', 'ffffffff');
    $result = stream_context_set_option($context, 'ssl', 'capath', '');

    $fp = fsockopen($host, 80, $errno, $errstr, 5, $context);
    printf("Open!\n");
    fputs($fp, "POST $path HTTP/1.1\r\n");
    fputs($fp, "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, */*\r\n");
    fputs($fp, "Referer: https://test/test/\r\n");
    fputs($fp, "Accept-Language: de\r\n");
    fputs($fp, "Content-Type: application/x-www-form-urlencoded\r\n");
    fputs($fp, "Accept-Encoding: gzip, deflate\r\n");
    fputs($fp, "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; .NET CLR 1.1.4322)\r\n");
    fputs($fp, "Host: $host\r\n");
    fputs($fp, "Cache-Control: no-cache");
    fputs($fp, "Connection: close\r\n\r\n");
    fputs($fp, $data_to_send);
    printf("Sent!\n");
    while(!feof($fp)) {
    $res .= fgets($fp, 128);
    }
    printf("Done!\n");
    fclose($fp);

    return $res;
    }
    Schön ist schonmal, dass der Code funktioniert, d.h. an der Gegenstelle kommt was an und das Zertifikat (da SSL) wird auch korrekt angewendet. Schlecht ist hingegen, dass die Gegenstelle (Apache Webserver) mir folgenden Fehler ausgibt:

    HTTP/1.1 400 Bad Request Date: Mon, 10 May 2004 12:52:06 GMT Server: Apache/1.3.26 (Unix) PHP/4.2.3 ApacheJServ/1.1.2 mod_perl/1.27 mod_ssl/2.8.10 OpenSSL/0.9.6g Connection: close Transfer-Encoding: chunked Content-Type: text/html; charset=iso-8859-1 X-Pad: avoid browser bug 169
    Bad Request
    Your browser sent a request that this server could not understand.
    Client sent malformed Host header
    Das war jetzt nicht unbedingt mein Ziel
    Fällt jemandem vielleicht ein Fehler in meinem HTTP Header auf? Muss ich bei HTTPS vielleicht noch etwas anderes beachten?

    Danke für Eure Mühe,

    Exe


    PS: bevor jetzt jemand auf die Idee kommt zu sagen "dann bau doch einfach eine Form und schick die per JS ab" --> ganz schlecht, weil ich auf die Rückmeldung vom Server angewiesen bin und ich wüsste jetzt nicht, wie ich eine Server Rückmeldung per JS an mein PHP Skript zur Weiterverarbeitung übergebe ...

  • #2
    Re: HTTP Post mit PHP (Stream Funktionen)

    Your browser sent a request that this server could not understand.
    Client sent malformed Host header
    an der stelle solltest du dich mal genauer um die übermittelten werte kümmern ...
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Die Werte, die ich übermittle sind:

      user=testuser&password=testpass

      Die gesendeten Werte sollten davon unabhängig ziemlich egal sein. Ich sollte einen Fehler zurück bekommen, der mir so in etwa sagt "NOT LOGGED IN". Da ich aber einen HTTP400 (wie ersichtlich Bad Request) bekomme, wird die Anfrage schon durch den Server abgewiesen...

      Kommentar


      • #4
        Original geschrieben von de_exe
        Die Werte, die ich übermittle sind:

        user=testuser&password=testpass
        langsam, langsam, so weit kommst du ja anscheinend gar nicht erst.

        aus welchem grund glaubst du wohl, habe ich einen teil der fehlermeldung zitiert, und davon noch mal einen teil fett hervorgehoben ...?
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Also entweder hab ich Dich total mißverstanden, oder wir reden aneinander vorbei.

          langsam, langsam, so weit kommst du ja anscheinend gar nicht erst.
          genau, deshalb hab ich ja geschrieben:
          Da ich aber einen HTTP400 (wie ersichtlich Bad Request) bekomme, wird die Anfrage schon durch den Server abgewiesen...
          Ich habe vermutet, dass Deine Anmerkung
          an der stelle solltest du dich mal genauer um die übermittelten werte kümmern ...
          sich auf die eigentlichen Post Parameter bezieht. Offenbar meinst Du aber den HTTP Header und genau das war ja meine Frage:
          Fällt jemandem vielleicht ein Fehler in meinem HTTP Header auf? Muss ich bei HTTPS vielleicht noch etwas anderes beachten?

          Kommentar


          • #6
            Re: Re: HTTP Post mit PHP (Stream Funktionen)

            OK, noch mal ...
            Client sent malformed Host header

            das dürfte sich wohl auf diese zeile beziehen,
            fputs($fp, "Host: $host\r\n");

            aber welchen wert $host hier hat, sprich mit welchem parameter du deine funktion aufrufst, weisst bisher immer noch nur du ...
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Jetzt weiss ich, was Du meinst! Es wäre wohl sinnvoll, beim HTTP Host Parameter nicht den Wert zu verwenden, der auch bei fsockopen() zum Einsatz kommt!!
              fsockopen() braucht ja ein vorangestelltes ssl:// damit es weiss, dass es sich um SSL handelt. Im Host Parameter im HTTP Header ist die Zeichenkette ssl:// natürlich vollkommen unangebracht.

              Absoluter Leichtsinnsfehler, Asche auf mein Haupt
              Trotzdem
              Zuletzt geändert von de_exe; 11.05.2004, 08:22.

              Kommentar


              • #8
                Also der Server versteht mich ja jetzt schonmal. Das neue Problem ist:

                Warning: fgets(): SSL: fatal protocol error in c:\programme\apache group\apache\htdocs\test\login.php
                Irgendeine Idee?
                Zuletzt geändert von de_exe; 11.05.2004, 09:34.

                Kommentar


                • #9
                  Ok, ich habe ein wenig nachgeforscht. Das Problem liegt wohl darin, dass es in PHP einen Bug gibt, welcher dann genau für die von mir beschriebene Meldung verantwortlich ist. Mit der neuesten PHP4 bzw. PHP5 version soll das aber behoben sein. Also habe ich auf meinem Test-System mal php5 rc2 installiert und konfiguriert.

                  Bloss jetzt kann ich meinen alten Code nicht mehr ausführen, da
                  while(!feof($fp)) {
                  $res .= fgets($fp, 128);
                  }
                  wohl zu einer Endlosschleife führt.

                  Am Rande und ziemlich vage habe ich erfahren, dass PHP5 Streams jetzt etwas anders handeln soll

                  Weiss da jemand genaueres?
                  Zuletzt geändert von de_exe; 11.05.2004, 17:15.

                  Kommentar


                  • #10
                    Wirklich niemand?

                    Kommentar

                    Lädt...
                    X