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.