#include <stdio.h>
#include <stdlib.h>
#include "openssl/bio.h"
#include "openssl/ssl.h"
#include "openssl/err.h"
char* join(char *s1, char *s2);
int main()
{
BIO *sbio, *out;
int len;
char tmpbuf[1024];
SSL_CTX *ctx;
SSL *ssl;
//ERR_load_crypto_strings();
ERR_load_SSL_strings();
//OpenSSL_add_all_algorithms();
SSL_library_init();
//如果系统平台不支持自动进行随机数种子的设置,这里应该进行设置(seed PRNG)
ctx = SSL_CTX_new(SSLv23_client_method());
//ctx = SSL_CTX_new(TLS_client_method());
//SSL_CTX_set_cipher_list(ctx,"EXP-RC4-MD5");
//通常应该在这里设置一些验证路径和模式等,因为这里没有设置,所以该例子可以跟使用任意CA签发证书的任意服务器建立连接
sbio = BIO_new_ssl_connect(ctx);
BIO_get_ssl(sbio, &ssl);
if(!ssl)
{
fprintf(stderr, "Can't locate SSL pointer/n");
ERR_print_errors_fp(stderr);
}
/* 不需要任何重试请求*/
SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY);
//这里你可以添加对SSL的其它一些设置
BIO_set_conn_hostname(sbio, "106.39.167.232:443");
out = BIO_new_fp(stdout, BIO_NOCLOSE);
if(BIO_do_connect(sbio) <= 0)
{
fprintf(stderr, "Error connecting to server/n");
ERR_print_errors_fp(stderr);
}
printf("SSL connection using %s\n",SSL_get_cipher(ssl));
//SSL_CTX_set_cipher_list(ctx,SSL_get_cipher(ssl));
X509 *cert = SSL_get_peer_certificate(ssl);
printf ("Server certificate:\n");
char *str = X509_NAME_oneline(X509_get_subject_name(cert),0,0);
printf ("\t subject: %s\n", str);
OPENSSL_free(str);
str = X509_NAME_oneline(X509_get_issuer_name(cert),0,0);
printf ("\t issuer: %s\n", str);
OPENSSL_free(str);
X509_free(cert);
if(BIO_do_handshake(sbio) <= 0)
{
fprintf(stderr, "Error establishing SSL connection/n");
ERR_print_errors_fp(stderr);
}
/* 这里可以添加检测SSL连接的代码,得到一些连接信息*/
const char *http_req_hdr_tmpl = "GET %s HTTP/1.1\r\n"
"Accept: image/gif, image/jpeg, text/json,text/html */*\r\nAccept-Language: zh-cn\r\n"
"Accept-Encoding: gzip, deflate\r\nHost: %s\r\n"
"User-Agent: %s <0.1>\r\nConnection: Keep-Alive\r\n\r\n";
int bufsize = 1024;
char header_get[bufsize];
len = sprintf(header_get,http_req_hdr_tmpl,"/routerjson","api.jd.com","User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36");
//BIO_puts(sbio, header_get);
BIO_write(sbio,header_get,len);
for(;;)
{
len = BIO_read(sbio, tmpbuf, 1024);
if(len <= 0) break;
BIO_write(out, tmpbuf, len);
}
BIO_free_all(sbio);
BIO_free(out);
return 0;
}
相关推荐
由CW1524组成的降压式斩波开关稳压电源电路
CITE 2026 圆满闭幕|前沿科技汇聚鹏城,世界级产业集群动能澎湃
JavaScript源代码集
Nordic Semiconductor 重磅亮相 Bluetooth Asia 2026 以全域物联网全栈能力开启无线创新篇章
慕尼黑上海电子展热点追踪:从\"强制配储\"到\"十万亿支柱\",储能产业的价值重生
MSP430 学习套件(五)
由CW1524组成的半桥式开关稳压电源电路
情感机器人缓解人类焦虑的情绪
英飞凌持续巩固全球车用半导体市场领导地位
614A-II(1kVA)交流稳压器电路
MSP430 学习套件(六)
MSP430 学习套件(四)
Molex 莫仕通过一站式光学互连架构以及首次推出的高基数光电路交换机平台,加速 AI 集群部署
由CW1524A组成的4W直流变换器
MSP430 学习套件(二)
MSP430 学习套件(三)
印度软件出口迅猛增长 9个月总额高达56亿
小尺寸显示器件市场升温
意法半导体集成保护功能的氮化镓栅极驱动器
由CS3842构成的三输出直流稳压电源电路
Stryten 推出E系列AGM电池 提升电信与公用事业供电可靠性
源源不断获取最新工艺 上海芯冲刺国际先进
Internet协议代码(BSD4.4)
GSMGPRS通信在配电自动化系统中的应用
IEEE802.11网络中服务质量支持机制的研究
亚马逊推出商用飞机高速卫星互联网天线
KS8999 以太网络交换机芯片
赋能智能车与机器人技术转型:大联大世平集团携手AutoSys举办线上研讨会
FRDM Automotive:基于S32汽车处理平台,加速开发进程
机器人实验室网址