170 free(work);
171 }
172
173 //*******************************************************************************************************
174 // SendHTTP:
175 // Main entry point for this code.
176 // url - The URL to GET/POST to/from.
177 // headerSend - Headers to be sent to the server.
178 // post - Data to be posted to the server, NULL if GET.
179 // postLength - Length of data to post.
180 // req - Contains the message and headerSend sent by the server.
181 //
182 // returns 1 on failure, 0 on success.
183 //*******************************************************************************************************
184 int Request::SendHTTP(string url,LPCSTR headerReceive,BYTE *post,
185 DWORD postLength,HTTPRequest *req)
186 {
187 WSADATA WsaData;
188 SOCKADDR_IN sin;
189 SOCKET sock;
190 char buffer[512];
191 char protocol[20],host[256],request[1024];
192 int l,port,chars,err;
193 MemBuffer headersBuffer,messageBuffer;
194 char headerSend[1024];
195 BOOL done;
196
197
198
199
200 ParseURL(url,protocol,sizeof(protocol),host,sizeof(host), // Parse the URL
201 request,sizeof(request),&port);
202 if(strcmp(protocol,"HTTP"))
203 return 1;
204
205 err = WSAStartup (0x0101, &WsaData); // Init Winsock
206 if(err!=0)
207 return 1;
208
209 sock = socket (AF_INET, SOCK_STREAM, 0);
210 //if (socket == INVALID_SOCKET)
211 if (sock == INVALID_SOCKET)
212 {
213 return 1;
214 }
215
216 sin.sin_family = AF_INET; //Connect to web sever
217 sin.sin_port = htons( (unsigned short)port );
218 sin.sin_addr.s_addr = GetHostAddress(host);
219
220 if( connect (sock,(LPSOCKADDR)&sin, sizeof(SOCKADDR_IN) ) )
221 {
222
223 return 1;
224 }
225
226
227 if( !*request )
228 lstrcpyn(request,"/",sizeof(request));
229
230 if( post == NULL )
231 {
232 SendString(sock,"GET ");
233 strcpy(headerSend, "GET ");
234 }
235 else
236 {
237 SendString(sock,"POST ");
238 strcpy(headerSend, "POST ");
239 }
240 SendString(sock,request);
241 strcat(headerSend, request);
242
243 SendString(sock," HTTP/1.0\r\n");
244 strcat(headerSend, " HTTP/1.0\r\n");
245
246 SendString(sock,"Accept: image/gif, image/x-xbitmap,"
247 " image/jpeg, image/pjpeg, application/vnd.ms-excel,"
248 " application/msword, application/vnd.ms-powerpoint,"
249 " */*\r\n");
250 strcat(headerSend, "Accept: image/gif, image/x-xbitmap,"
251 " image/jpeg, image/pjpeg, application/vnd.ms-excel,"
252 " application/msword, application/vnd.ms-powerpoint,"
253 " */*\r\n");
254
255 SendString(sock,"Accept-Language: en-us\r\n");
256 strcat(headerSend, "Accept-Language: en-us\r\n");
257
258 SendString(sock,"Accept-Encoding: gzip, default\r\n");
259 strcat(headerSend, "Accept-Encoding: gzip, default\r\n");
260
261 SendString(sock,"User-Agent: Neeao/4.0\r\n");
262 strcat(headerSend, "User-Agent: Neeao/4.0\r\n");
263
264 if(postLength)
265 {
266 sprintf(buffer,"Content-Length: %ld\r\n",postLength);
267 SendString(sock,buffer);
268 strcat(headerSend, buffer);
269 }
270 //SendString(sock,"Cookie: mycookie=blablabla\r\n");
271 // printf("Cookie: mycookie=blablabla\r\n");
272 SendString(sock,"Host: ");
273 strcat(headerSend, "Host: ");
274
275 SendString(sock,host);
276 strcat(headerSend, host);
277
278 SendString(sock,"\r\n");
279 strcat(headerSend, "\r\n");
280
281 if( (headerReceive!=NULL) && *headerReceive )
282 {
283 SendString(sock,headerReceive);
284 strcat(headerSend, headerReceive);
285 }
286
287 SendString(sock,"\r\n"); // Send a blank line to signal end of HTTP headerReceive
288 strcat(headerSend, "\r\n");
289
290 if( (post!=NULL) && postLength )
291 {
292 send(sock,(const char*)post,postLength,0);
293 post[postLength] = '\0';
294
295 strcat(headerSend, (const char*)post);
296 }
297
298 //strcpy(req->headerSend, headerSend);
299 req->headerSend = (char*) malloc( sizeof(char*) * strlen(headerSend));
300 strcpy(req->headerSend, (char*) headerSend );
301
302
303 MemBufferCreate(&headersBuffer );
304 chars = 0;
305 done = FALSE;
306