willbend Skrevet 31. januar 2006 Skrevet 31. januar 2006 #include <stdio.h> #include "winsock2.h" #include <iostream> #include <fstream> #include <windows.h> using namespace std; int main(int argc, char *argv[]) { // MessageBox(NULL, "hallo", "socketIndication", MB_OK); // Initialize Winsock. WSADATA wsaData; int iResult = WSAStartup( MAKEWORD(2,2), &wsaData ); if ( iResult != NO_ERROR ) printf("Error at WSAStartup()\n"); // Create a socket. SOCKET m_socket; m_socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ); if ( m_socket == INVALID_SOCKET ) { printf( "Error at socket(): %ld\n", WSAGetLastError() ); WSACleanup(); return 1; } // Connect to a server. LPHOSTENT hostEntry; hostEntry = gethostbyname(argv[1]); sockaddr_in clientService; clientService.sin_family = AF_INET; clientService.sin_addr = *((LPIN_ADDR)*hostEntry->h_addr_list); // inet_addr("127.0.0.1"); clientService.sin_port = htons( 80 ); if ( connect( m_socket, (SOCKADDR*) &clientService, sizeof(clientService) ) == SOCKET_ERROR) { printf( "Failed to connect.\n" ); WSACleanup(); return 1; } // Send and receive data. if(argc!=3) { cout<<"Usage:connect_web www.sau.no /index.html"; return 1; } char sendbuf[2000]="POST "; strcat(sendbuf, argv[2]); strcat(sendbuf, " HTTP/1.1\r\nHost: "); strcat(sendbuf, argv[1]); strcat(sendbuf, "\r\nUser-Agent: who_cares?\r\n"); strcat(sendbuf, "Referer: google.com\r\n"); strcat(sendbuf, "Connection: close\r\n"); strcat(sendbuf, "Content-Type: application/x-www-form-urlencoded\r\n"); strcat(sendbuf, "Content-Length: 16\r\n"); strcat(sendbuf, "from=faen\r\n"); strcat(sendbuf, "submit=\r\n\r\n"); cout<< sendbuf << "\n"; char recvbuf[100]; int bytesRecv; send( m_socket, sendbuf, strlen(sendbuf), 0 ); while(bytesRecv!=SOCKET_ERROR) { bytesRecv=recv( m_socket, recvbuf, strlen(recvbuf), 0 ); if(!bytesRecv) { break; } cout.write(recvbuf, strlen(recvbuf)); } WSACleanup(); return 1; } Jeg greider å POST'e uten variabler, men når jeg la til strcat(sendbuf, "from=faen\r\n"); strcat(sendbuf, "submit=\r\n\r\n"); Så fikk jeg: Request header field is missing ':' separator.<br /> <pre> from=faen</pre> Jeg har prøvd å lese litt i http rfc, men fant ingen konkrete eksempler. Hva er feil skal ikke POST variabler komme til slutt?
dayslepr Skrevet 1. februar 2006 Skrevet 1. februar 2006 (endret) http://www.jmarshall.com/easy/http/#othermethods sjekk denne i alle de andre headerene dine bruker du : for å skille nøkkler og verdier .. så hvorfor du plutselig går over til å bruke = skjønner jeg ikke helt Endret 1. februar 2006 av dayslepr
willbend Skrevet 1. februar 2006 Forfatter Skrevet 1. februar 2006 http://www.jmarshall.com/easy/http/#othermethods sjekk denne i alle de andre headerene dine bruker du : for å skille nøkkler og verdier .. så hvorfor du plutselig går over til å bruke = skjønner jeg ikke helt 5532033[/snapback] Det skal være = på POST variabler, men hva er feil? Skal det være .... strcat(sendbuf, "Content-Length: 17\r\n"); strcat(sendbuf, "from=faen\r\n\r\n"); Eller .... strcat(sendbuf, "Content-Length: 17\r\n\r\n"); strcat(sendbuf, "from=faen\r\n"); Eller skal strcat(sendbuf, "from=faen\r\n\r\n"); komme før alle andre headere? Noen som vet?
dayslepr Skrevet 1. februar 2006 Skrevet 1. februar 2006 (endret) "from" er en del av headerene - altså ikke en variabel (POST-data) ... ta å les det som står i artikkelen jeg linker til da! edit: err .. åja, jeg trodde du mente headeren "from" - for den brukes nemlig også.. da er det i såfall den andre versjonen av de du henviser til som er riktig strcat(sendbuf, "Content-Length: 17\r\n\r\n"); strcat(sendbuf, "from=faen\r\n"); altså to newlines etter headerene.. uansett er dette veldig greit forklart i den lille teksen jeg linket til over - med eksempler og alt Endret 1. februar 2006 av dayslepr
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå