void main(int argc,char *argv[]) { ghttp_request *request = NULL; request = ghttp_request_new(); ghttp_set_uri(request, argv[1]); ghttp_set_type(request, ghttp_type_post); ghttp_set_body(request, argv[2],strlen(argv[2])); printf("%s\n", argv[2]); ghttp_prepare(request); ghttp_process(request); fwrite(ghttp_get_body(request), ghttp_get_body_len(request), 1, stdout); fprintf(stdout, " Length: %s\n", ghttp_get_header(request, "Content-Length")); fprintf(stdout, " Location: %s\n", ghttp_get_header(request, "Location")); }
int ghttp_download_file(char *path, char *url) { ghttp_request *request = NULL; FILE * pFile=NULL; char *buf=NULL; int ret = 0; ghttp_status req_status; ghttp_proc req_proc; int bytes_read=0,recvbytes=0; int status_code=0; char *redirect = NULL; #if GHTTP_DEBUG char *tmp_pchar = NULL; #endif request = ghttp_request_new(); if( ghttp_set_uri(request, url) < 0 ){ ghttpDebug("invalid url: %s \n", url); ret = -1; goto END; } if(!path) path = ghttp_get_resource_name(request); if(!path) path = "httpget.html"; pFile = fopen ( path , "wb" ); if(pFile == NULL){ ghttpDebug("error: %s [%s]\n", strerror(errno), path); ret = -2; goto END; } ghttpDebug("host: %s \n", ghttp_get_host(request)); if( ghttp_set_type(request, ghttp_type_get) < 0 ){ ret = -3; goto END; } if (ghttp_set_sync(request, ghttp_async) < 0){ ret = -3; goto END; } if( ghttp_prepare(request) < 0 ){ ret = -3; goto END; } do { req_status = ghttp_process(request); if( req_status == ghttp_error ){ ghttpDebug("%s \n", ghttp_get_error(request)); ret = -4; goto END; } else { if( req_status == ghttp_done ) { status_code = ghttp_status_code(request); if(status_code != 200){ fclose(pFile); pFile = NULL; break; } } req_proc = ghttp_get_proc(request); if( req_proc == ghttp_proc_response || req_proc == ghttp_proc_done ) { #if GHTTP_DEBUG if( !tmp_pchar ) { tmp_pchar = (char *)ghttp_get_header(request, "Content-Length"); ghttpDebug("Content-Length: %s \n", tmp_pchar ? tmp_pchar : "null"); tmp_pchar = (char *)ghttp_get_header(request, "Transfer-Encoding"); ghttpDebug("Transfer-Encoding: %s \n", tmp_pchar ? tmp_pchar : "null"); tmp_pchar = (char *)ghttp_get_header(request, "Content-Encoding"); ghttpDebug("Content-Encoding: %s \n", tmp_pchar ? tmp_pchar : "null"); tmp_pchar = (char *)1; ghttpDebug("recvbytes: "); } #endif ghttp_flush_response_buffer(request); if(ghttp_get_body_len(request) > 0) { buf = ghttp_get_body(request); bytes_read = ghttp_get_body_len(request); recvbytes += bytes_read; if(buf) fwrite(buf,bytes_read,1,pFile); } ghttpDebug("%d", recvbytes); } } }while (req_status == ghttp_not_done); //ret = status_code; switch(status_code) { case 200: default: break; case 302: buf = (char *)ghttp_get_header(request, "Location"); if(buf){ redirect = (char *)malloc(strlen(buf)+1); if(redirect == NULL){ ret = -1; goto END; } strcpy(redirect, buf); } break; } END: ghttp_request_destroy(request); if(pFile) fclose(pFile); if(redirect){ ghttpDebug("redirect: %s \n", redirect); ret = ghttp_download_file(path, redirect); free(redirect); } return ret; }
int ghttp_post_work(ghttp_request *request, struct ghttp_result *result, struct ghttp_post_data *data) { int ret = 0; ghttp_status req_status; ghttp_proc req_proc; int status_code = 0; // ghttp_request *redirect_request; // char *redirect = NULL, *buf = NULL; #if GHTTP_DEBUG char *tmp_pchar = NULL; #endif if(!request || !data) return -1; ghttp_set_type(request, ghttp_type_post); ghttp_set_sync(request, ghttp_async); if( ghttp_prepare(request) < 0 ){ ret = -3; goto END; } do { req_status = ghttp_process(request); if( req_status == ghttp_error ){ ghttpDebug("%s \n", ghttp_get_error(request)); ret = -3; goto END; } else { if(req_status == ghttp_next ){ data->post_data_func(request, data); } if( req_status == ghttp_done ) { status_code = ghttp_status_code(request); if(status_code != 200){ ghttp_result_recv_finish(request, result); break; } } req_proc = ghttp_get_proc(request); if( req_proc == ghttp_proc_response || req_proc == ghttp_proc_done ) { #if GHTTP_DEBUG if( !tmp_pchar ) { tmp_pchar = (char *)ghttp_get_header(request, "Content-Length"); ghttpDebug("Content-Length: %s \n", tmp_pchar ? tmp_pchar : "null"); tmp_pchar = (char *)ghttp_get_header(request, "Transfer-Encoding"); ghttpDebug("Transfer-Encoding: %s \n", tmp_pchar ? tmp_pchar : "null"); tmp_pchar = (char *)ghttp_get_header(request, "Content-Encoding"); ghttpDebug("Content-Encoding: %s \n", tmp_pchar ? tmp_pchar : "null"); tmp_pchar = (char *)ghttp_get_header(request, "Content-Type"); ghttpDebug("Content-Type: %s \n", tmp_pchar ? tmp_pchar : "null"); tmp_pchar = (char *)1; } #endif ghttp_result_recv(request, result); } } }while (req_status == ghttp_not_done); END: ghttpDebug("http_code: %d \n", status_code); if(ret == 0 && (status_code < 200 || status_code >= 300)) ret = -3; if(result) result->http_code = status_code; ghttp_result_recv_finish(request, result); ghttp_request_destroy(request); return ret; }
int ghttp_get_work(ghttp_request *request, struct ghttp_result *result) { int ret = 0; ghttp_status req_status; ghttp_proc req_proc; int status_code = 0; ghttp_request *redirect_request; char *redirect = NULL, *buf = NULL; #if GHTTP_DEBUG char *tmp_pchar = NULL; #endif if(!request) return -1; ghttp_set_type(request, ghttp_type_get); ghttp_set_sync(request, ghttp_async); if( ghttp_prepare(request) < 0 ){ ret = -3; goto END; } do { req_status = ghttp_process(request); if( req_status == ghttp_error ){ ghttpDebug("%s \n", ghttp_get_error(request)); ret = -3; goto END; } else { if( req_status == ghttp_done ) { status_code = ghttp_status_code(request); if(status_code != 200){ ghttp_result_recv_finish(request, result); break; } } req_proc = ghttp_get_proc(request); if( req_proc == ghttp_proc_response || req_proc == ghttp_proc_done ) { #if GHTTP_DEBUG if( !tmp_pchar ) { tmp_pchar = (char *)ghttp_get_header(request, "Content-Length"); ghttpDebug("Content-Length: %s \n", tmp_pchar ? tmp_pchar : "null"); tmp_pchar = (char *)ghttp_get_header(request, "Transfer-Encoding"); ghttpDebug("Transfer-Encoding: %s \n", tmp_pchar ? tmp_pchar : "null"); tmp_pchar = (char *)ghttp_get_header(request, "Content-Encoding"); ghttpDebug("Content-Encoding: %s \n", tmp_pchar ? tmp_pchar : "null"); tmp_pchar = (char *)ghttp_get_header(request, "Content-Type"); ghttpDebug("Content-Type: %s \n", tmp_pchar ? tmp_pchar : "null"); tmp_pchar = (char *)1; } #endif ghttp_result_recv(request, result); } } }while (req_status == ghttp_not_done); switch(status_code) { case 200: default: break; case 302: buf = (char *)ghttp_get_header(request, "Location"); if(buf){ redirect = (char *)malloc(strlen(buf)+1); if(redirect == NULL){ ret = -2; goto END; } strcpy(redirect, buf); } break; } END: if(result) result->http_code = status_code; ghttp_result_recv_finish(request, result); if(redirect){ ghttpDebug("redirect: %s \n", redirect); redirect_request = ghttp_request_redirect(request, redirect); ghttp_request_destroy(request); free(redirect); ret = ghttp_get_work(redirect_request, ghttp_result_clean(result)); } else ghttp_request_destroy(request); return ret; }