⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wclient.c

📁 OpenSSL相关的例子程序
💻 C
字号:
/* A simple HTTPS client   It connects to the server, makes an HTTP   request and waits for the response*/#include "common.h"#include "client.h"static char *REQUEST_TEMPLATE=   "GET / HTTP/1.0\r\nUser-Agent:"   "EKRClient\r\nHost: %s:%d\r\n\r\n";static char *host=HOST;static int port=PORT;static int require_server_auth=1;static int http_request(ssl)  SSL *ssl;  {    char *request=0;    char buf[BUFSIZZ];    int r;    int len, request_len;        /* Now construct our HTTP request */    request_len=strlen(REQUEST_TEMPLATE)+      strlen(host)+6;    if(!(request=(char *)malloc(request_len)))      err_exit("Couldn't allocate request");    snprintf(request,request_len,REQUEST_TEMPLATE,      host,port);    /* Find the exact request_len */    request_len=strlen(request);    r=SSL_write(ssl,request,request_len);    switch(SSL_get_error(ssl,r)){            case SSL_ERROR_NONE:        if(request_len!=r)          err_exit("Incomplete write!");        break;        default:          berr_exit("SSL write problem");    }        /* Now read the server's response, assuming       that it's terminated by a close */    while(1){      r=SSL_read(ssl,buf,BUFSIZZ);      switch(SSL_get_error(ssl,r)){        case SSL_ERROR_NONE:          len=r;          break;        case SSL_ERROR_ZERO_RETURN:          goto shutdown;        case SSL_ERROR_SYSCALL:          fprintf(stderr,            "SSL Error: Premature close\n");          goto done;        default:          berr_exit("SSL read problem");      }      fwrite(buf,1,len,stdout);    }      shutdown:    r=SSL_shutdown(ssl);    switch(r){      case 1:        break; /* Success */      case 0:      case -1:      default:        berr_exit("Shutdown failed");    }      done:    SSL_free(ssl);    free(request);    return(0);  }    int main(argc,argv)  int argc;  char **argv;  {    SSL_CTX *ctx;    SSL *ssl;    BIO *sbio;    int sock;    extern char *optarg;    int c;    while((c=getopt(argc,argv,"h:p:i"))!=-1){      switch(c){        case 'h':          if(!(host=strdup(optarg)))            err_exit("Out of memory");          break;        case 'p':          if(!(port=atoi(optarg)))            err_exit("Bogus port specified");          break;        case 'i':          require_server_auth=0;          break;      }    }    /* Build our SSL context*/    ctx=initialize_ctx(KEYFILE,PASSWORD);    /* Connect the TCP socket*/    sock=tcp_connect(host,port);    /* Connect the SSL socket */    ssl=SSL_new(ctx);    sbio=BIO_new_socket(sock,BIO_NOCLOSE);    SSL_set_bio(ssl,sbio,sbio);    if(SSL_connect(ssl)<=0)      berr_exit("SSL connect error");    if(require_server_auth)      check_cert(ssl,host);     /* Now make our HTTP request */    http_request(ssl);    /* Shutdown the socket */    destroy_ctx(ctx);    close(sock);    exit(0);  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -