HTTP Post request



  • Hallo ich hab es mal versucht aber ich bekomme immer vom Server die Meldung Bad request

    Was ist hier dran falsch ?

    string req = ("POST 213.202.225.64 HTTP/1.1\r\n");
    req+= ("Host: /s2.php?login=123\r\n");
    
    req+=("Referer: http://testaccount435.te.funpic.de/\r\n");
    req+=("Content-type: application/x-www-form-urlencoded\r\n");
    
    req+=("Content-length: %d\r\n") ,  strlen(req.c_str()) ;
    
    req+=("Connection: close\r\n\r\n");
    req+= (" %d \r\n") , req ;
    

    Mein gesamter Quelltext:

    #include <iostream>
    #include <windows>
    using namespace std;
    
    int main()
    {
    
    int wsa_ret = 0;
    int ret_connect = 0;
    char rec[256];
    
    string req = ("POST 213.202.225.64 HTTP/1.1\r\n");
    req+= ("Host: /s2.php?login=123\r\n");
    
    req+=("Referer: http://testaccount435.te.funpic.de/\r\n");
    req+=("Content-type: application/x-www-form-urlencoded\r\n");
    
    req+=("Content-length: %d\r\n") ,  strlen(req.c_str()) ;
    
    req+=("Connection: close\r\n\r\n");
    req+= (" %d \r\n") , req ;
    
    SOCKET client = 0;
    WORD wVersionRequested = MAKEWORD( 2, 2);
    WSAData lpWSAData;
    
    wsa_ret = WSAStartup ( wVersionRequested, &lpWSAData );
    
            if ( wsa_ret != 0)
            {
              cout <<"init error"<<endl;
            }
    
          client =  socket( AF_INET , SOCK_STREAM , IPPROTO_TCP );
    
          if ( client == INVALID_SOCKET )
          {
            cout <<"invalid socket" <<endl;
          }
    
    sockaddr_in sock_stru;
    
    sock_stru.sin_family = AF_INET;
    sock_stru.sin_addr.s_addr = inet_addr("213.202.225.64");
    sock_stru.sin_port = htons(80);
    
    ret_connect = connect( client ,  (sockaddr*)&sock_stru, sizeof(sock_stru) );
    
           if(ret_connect==SOCKET_ERROR)
           {
                 cout << "connect error" << endl;
           }
    
           else
           {
            cout<<"verbunden"<<endl<<endl;
           }
    
    while (  ret_connect != SOCKET_ERROR )
    {
    
          ret_connect= send(client,req.c_str(),strlen(req.c_str()),0);
    
          ret_connect  = recv(client, rec, 256, 0);
          cout<< rec <<endl;
    
          system("PAUSE");
    
    }
    
    system("PAUSE");
    return 0;
    
    }
    //---------------------------------------------------------------------------
    


  • die daten müssen als post hinten angehängt werden nach zwei zeilenumbrüchen, NACH den close. sonst schickst du sie per get 😉

    string data = "login=123";
    
    //dann über deine Zeichenketten nachdenken. hier nur die logik:
    POST /s2.php HTTP/1.1\r\n
    Host:213.202.225.64 \r\n
    Referer: http://testaccount435.te.funpic.de/\r\n
    Content-type: application/x-www-form-urlencoded\r\n
    Content-length:  9 \r\n //über strlen(data.c_str())
    Connection: close\r\n\r\n //hier dann nach den zwei umbrüchen die daten hinterher
    data \r\n
    


  • 😡

    Was ist da jetzt wieder falsch wieso geht das nicht ?

    BAD REQUEST ich kanns bald nicht mehr sehen. >_<

    string data = "login=123";
    
    string req = "POST seite2.php HTTP/1.1\r\n";
    req+= "Host: 213.202.225.64 \r\n";
    req+= "Referer: http://testaccount435.te.funpic.de/\r\n";
    req+="Content-type: application/x-www-form-urlencoded\r\n";
    
    req+=("Content-length: %d \r\n"), strlen(data.c_str() );
    req+= "Connection: close\r\n\r\n";
    req+= data , "\r\n";
    


  • Hinter "POST" muss entweder eine relative URL, beginnend mit "/" folgen ("POST /seite2.php HTTP/1.1") oder die absolute URL ("POST http://www.example.org/seite2.php HTTP/1.1")



  • Bad request 😞

    string data = "login=123";
    
    string req = "POST /seite2.php HTTP/1.1\r\n";
    req+= "Host: 213.202.225.64 \r\n";
    
    req+= "Referer: http://testaccount435.te.funpic.de/\r\n";
    req+="Content-type: application/x-www-form-urlencoded\r\n";
    
    req+=("Content-length: %d \r\n"), strlen(data.c_str() );
    req+= "Connection: close\r\n\r\n";
    req+= data , "\r\n"
    

    Auch bad request 😞

    string data = "login=123";
    
    string req = "POST http://testaccount435.te.funpic.de/seite2.php HTTP/1.1\r\n";
    req+= "Host: 213.202.225.64 \r\n";
    
    req+= "Referer: http://testaccount435.te.funpic.de/\r\n";
    req+="Content-type: application/x-www-form-urlencoded\r\n";
    
    req+=("Content-length: %d \r\n"), strlen(data.c_str() );
    req+= "Connection: close\r\n\r\n";
    req+= data , "\r\n";
    

    Wieso geht das nicht ? 😞 QQ



  • POST /seite2.php HTTP/1.1
    Host: testaccount435.te.funpic.de
    Referer: http://testaccount435.te.funpic.de/
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 9
    Connection: close
    
    login=123
    

    ...das meldet bei mir nen "200 OK"



  • Wieso denn bei mir nicht >_<

    Ich verstehs nicht -.-

    Hier ist mein Kompletter Code:

    #include <iostream>
    #include <windows> 
    using namespace std; 
    
    int main() 
    { 
    
    int wsa_ret = 0; 
    int ret_connect = 0; 
    char rec[256]; 
    
    string data = "login=123"; 
    
    string req = "POST http://testaccount435.te.funpic.de/seite2.php HTTP/1.1\r\n"; 
    req+= "Host: 213.202.225.64 \r\n"; 
    
    req+= "Referer: http://testaccount435.te.funpic.de/\r\n"; 
    req+="Content-type: application/x-www-form-urlencoded\r\n"; 
    
    req+=("Content-length: %d \r\n"), strlen(data.c_str() ); 
    req+= "Connection: close\r\n\r\n"; 
    req+= data , "\r\n";
    
    SOCKET client = 0;
    WORD wVersionRequested = MAKEWORD( 2, 2); 
    WSAData lpWSAData; 
    
    wsa_ret = WSAStartup ( wVersionRequested, &lpWSAData );
    
            if ( wsa_ret != 0) 
            { 
              cout <<"init error"<<endl; 
            } 
    
          client =  socket( AF_INET , SOCK_STREAM , IPPROTO_TCP ); 
    
          if ( client == INVALID_SOCKET ) 
          { 
            cout <<"invalid socket" <<endl; 
          } 
    
    sockaddr_in sock_stru; 
    
    sock_stru.sin_family = AF_INET; 
    sock_stru.sin_addr.s_addr = inet_addr("213.202.225.64"); 
    sock_stru.sin_port = htons(80); 
    
    ret_connect = connect( client ,  (sockaddr*)&sock_stru, sizeof(sock_stru) ); 
    
           if(ret_connect==SOCKET_ERROR) 
           { 
                 cout << "connect error" << endl; 
           } 
    
           else 
           { 
            cout<<"verbunden"<<endl<<endl; 
           } 
    
    while (  ret_connect != SOCKET_ERROR ) 
    { 
    
          ret_connect= send(client,req.c_str(),strlen(req.c_str()),0);
    
          ret_connect  = recv(client, rec, 256, 0); 
          cout<< rec <<endl; 
    
          system("PAUSE"); 
    
    } 
    
    system("PAUSE"); 
    return 0; 
    }
    


  • oops

    seite1.php muss eigentlich verwendet werden bei mir weil da hab ich die php Datei die einen Post request entgegenehmen kann:

    Also:

    string req = "POST http://testaccount435.te.funpic.de/seite1.php HTTP/1.1\r\n";

    anstatt:

    string req = "POST http://testaccount435.te.funpic.de/seite2.php HTTP/1.1\r\n";

    Aber es funktioniert trotzdem nicht bei mir. 😮



  • ein einfaches
    cout<< req;

    hätte dir gezeigt: wie kommst du darauf, dass %d ersetzt wird? prüfe deine zeichenkette!



  • Ja cout<<req; jetzt wird mir alles klar xD

    So funktioniert es nun endlich bei mir.

    string data = "login=123";
    
    string req = "POST http://testaccount435.te.funpic.de/seite2.php HTTP/1.1\r\n";
    req+= "Host: 213.202.225.64 \r\n";
    
    req+= "Referer: http://testaccount435.te.funpic.de/\r\n";
    req+="Content-type: application/x-www-form-urlencoded\r\n";
    
    req+="Content-length: 9\r\n";
    req+= "Connection: close\r\n\r\n";
    req+= data , "\r\n";
    

    Nur wie ich das ganze mit strlen lösen kann das krieg ich leider nicht hin :(.

    Hab ich noch nie gemacht :(.



  • Eine Frage noch wer kennt eine gute Seite wo alle diese Sachen nochmals erklärt werden ?

    Bisher hab ich bei google nichts wirklich brauchbares gefunden.


Anmelden zum Antworten