色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

c 調用 https json數據

錢淋西1年前7瀏覽0評論

在C項目中,我們經常需要從外部獲取數據,并將數據進行處理。對于需要保密的數據,可以使用https協議來保護數據的傳輸安全。而對于傳輸的數據格式,JSON成為了一種廣泛使用的格式。下面我們來介紹如何在C中調用https服務,獲取JSON格式的數據。

我們可以使用openssl庫來實現https的請求。首先,我們需要導入openssl頭文件,并在代碼中初始化openssl:

#include <openssl/ssl.h>
#include <openssl/err.h>
SSL_load_error_strings();
SSL_library_init();

然后,我們需要建立與https服務端的連接,可以使用以下代碼實現:

int sockfd;
struct sockaddr_in servaddr;
struct hostent *server;
SSL_CTX *ssl_ctx;
SSL *ssl;
char *host = "example.com";
char *port = "443";
sockfd = socket(AF_INET, SOCK_STREAM, 0);
server = gethostbyname(host);
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
bcopy((char *)server->h_addr_list[0], (char *)&servaddr.sin_addr.s_addr, server->h_length);
servaddr.sin_port = htons(atoi(port));
connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
ssl_ctx = SSL_CTX_new(TLS_client_method());
ssl = SSL_new(ssl_ctx);
SSL_set_fd(ssl, sockfd);
SSL_connect(ssl);

這里我們需要替換host和port為我們所需要連接的https服務的地址和端口號。

接下來,我們可以向https服務發送請求。以GET請求為例:

char *request = "GET /api/data HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\n\r\n";
SSL_write(ssl, request, strlen(request));

這里我們需要替換請求路徑為我們所需要的路徑。

最后,我們可以讀取https服務返回的JSON數據:

int buflen = 2048;
char buf[buflen];
char *content;
int contentlen = 0;
int contentbuflen = buflen;
while (1) {
int n = SSL_read(ssl, buf, buflen);
if (n >0) {
content = realloc(content, contentlen + n);
memcpy(content + contentlen, buf, n);
contentlen += n;
contentbuflen += buflen;
content = realloc(content, contentbuflen);
} else {
break;
}
}
printf("%s", content);

這里我們需要根據需要修改buflen的大小,以及根據實際讀取的數據長度對content進行realloc操作。