Socket GET, HTTP/1.1 400 Bad Request


  • Administrator

    Kann jetzt nichts zum Problem direkt sagen. Vielleicht kommt eine Weiterleitung oder HTTP/1.0 wird vom Server nicht mehr unterstützt, was teilweise schon vorkommt, da 1.0 doch schon langsam in die Jahre kommt.
    Vielleicht könntest du uns sagen, was denn genau zurück kommt.

    Zu dem Hypertext Transfer Protocol kann ich im übrigen nur das entsprechende RFC empfehlen zu lesen. Ist zwar etwas mühsam, dafür hat man dann gleich alles genau erklärt. Ein PDF kann man hier finden:
    http://ietfreport.isoc.org/rfc2600-2699.html

    Es ist das RFC mit der Nummer 2616.

    Grüssli



  • ein Beispiel ich gebe eine Seite ein, wo ich dessen Inhalt ich möchte.
    Es kommt dann der Inhalt der Seite von Webhoster.

    HTTP/1.1 200 OK
    Date: Sat, 04 Oct 2008 22:00:56 GMT
    Server: Apache/1.3.41 (Unix) mod_gzip/1.3.26.1a mod_fastcgi/2.4.6 PHP/4.4.8 mod_ssl/2.8.31 OpenSSL/0.9.8h
    Last-Modified: Thu, 09 Jun 2005 14:23:52 GMT
    ETag: "3ee08a-649-42a850f8"
    Accept-Ranges: bytes
    Content-Length: 1609
    Connection: close
    Content-Type: text/html
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <!-- ... -->
    <HTML><HEAD><TITLE>.......</TITLE>
    <META content="text/html; charset=iso-8859-1" http-equiv=Content-Type><!-- Changed by: System Administrator, 08-April-2002 -->
    <META content="MSHTML 5.00.3103.1000" name=GENERATOR></HEAD>
    <BODY bgColor=#ffffff link=#000000 vLink=#990000><BR><BR><BR>
    <CENTER>
    <TABLE bgColor=#6e7275 border=0 cellPadding=1 cellSpacing=0 width=500>
      <TBODY>
      <TR>
        <TD>
          <TABLE bgColor=#ffffff border=0 cellPadding=10 cellSpacing=0 
            width="100%"><TBODY>
            <TR>
    
              <TD align=right><A hr
    

    Und das komische ist das genau bei <A hr aufhört, aber trotzdem das ist nicht der Inhalt der Seite die ich möchte.


  • Administrator

    1. Woher willst du bei dieser Antwort wissen, dass sie vom Webhoster kommt? Ich sehe da nichts, was darauf hindeutet.
    2. Logisch bricht es ab, du hast einen Buffer von 1024 Bytes übergeben, tatsächlich kommen aber 1609 Bytes bei dir an. Du liest hier als eine Anzahl an Bytes gar nicht aus. Schau dir mal Content-Length an.
    Und deshalb empfehle ich auch das lesen vom RFC 2616. Denn es gibt auch die Möglichkeit, dass die Übertragungsart Chunked ist oder gar Encrypted. usw. usf.

    Daher muss man beim empfang den Header genau lesen und analysieren und kann dann den Body auslesen.

    Grüssli



  • Viel mehr kannst du bei einmaligem Aufruf von recv() auch nicht erwarten. Du musst die Daten solange in einer Schleife abholen, bis die Verbindung beendet wurde.



  • Hallo,
    ich habe das Problem gelöst.

    strcpy(tempo, "GET / HTTP/1.1\r\nHost: www.beispiel.de\r\n\r\n");
    

    Danke für eure hilfe.

    P.S. ich weiß dass das der Webhoster ich weil ich die abgefragte Seite kannte.



  • titanium schrieb:

    Hallo,
    ich habe das Problem gelöst.

    Solange bis

    Transfer-encoding: chunked
    

    ist. 😉



  • Is ja logisch, wieviele Seiten liegen bei so einem Webhoster auf einer IP!
    Der muss doch wissen, welche Seite man jetzt wirklich wollte.
    Und das wiederum nur mit HTML 1.1!
    😉



  • Und das wiederum nur mit HTML 1.1!

    😕 😕 😕 😕 😕



  • host schrieb:

    Und das wiederum nur mit HTML 1.1!

    😕 😕 😕 😕 😕

    😮 Was hab ich denn da geschrieben!
    :p HTTP



  • Den Host-Header kann man doch auch bei HTTP 1.0 angeben?!



  • Bei mir lief es zuerst auch nicht, bis ich die
    "\n\r" zu "\r\n" umgedreht hab. Dann gings.
    Falls man mehrere Angaben macht (z. B. noch
    "Content-Type: text/html" oder so - immer mit
    "\r\n" abschließen und bei der letzten Zeile
    mit "\r\n\r\n" abschließen.



  • Bei mir lief es zuerst auch nicht, bis ich die
    "\n\r" zu "\r\n" umgedreht hab. Dann gings.
    Falls man mehrere Angaben macht (z. B. noch
    "Content-Type: text/html" oder so - immer mit
    "\r\n" abschließen und bei der letzten Zeile
    mit "\r\n\r\n" abschließen.



  • hey

    also ich versuche das ganze auchnoch mit nem php script zu vereinen...
    allerdings gelingt es mir noch nicht so ganz

    wenn ich

    strcpy(tempo, "GET / HTTP/1.1\r\nHost: http://myserver.de/userlogin_sell.php?username=test&password=test&product=test\r\n\r\n");
    

    sende bekomm ich auch nur ein bad seit error zurück 😉

    jemand ne idee?



  • "GET userlogin_sell.php?username=test&password=test&product=test HTTP/1.1\r\nHost: www.myhost.de\r\n\r\n"

    so gehts 😉



  • Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum Webzeugs verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten