使用bcb 调用 openssl库进行https get请求
来源:互联网 发布:女士休闲鞋新款淘宝网 编辑:程序博客网 时间:2024/06/06 01:34
1编译安装openssl
首先,下载并安装active perl(编译openssl时需要)
然后从chinaunix下载频道中下载openssl-0.9.8x.tar.gz,并解压。
打开控制台,cd切换目录到解压后所在目录,运行ms\bcb4.bat。
2配置bcb
选择菜单project-》option-》directories/conditionals
将inc32路径加入到include path中
将out32路径加入到library path中
3示例源码
#include "openssl/ssl.h"
#include "openssl/err.h"
#include "openssl/bio.h"
#include "openssl/rand.h"
#pragma comment(lib, "ssleay32.lib")
#pragma comment(lib, "libeay32.lib")
int getPages()
{
const char* domain="github.com";
const char* host_addr="192.30.252.128";
const int host_port=443;
const char* pObject="/mikesmullin/MenuetOS-64";
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 0), &wsaData);
SOCKET sockfd;
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
////DebugMsg("Socket Error: %s", strerror(errno));
return -1;
}
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(host_port);
server_addr.sin_addr.s_addr = inet_addr(host_addr);
if (connect(sockfd, (struct sockaddr *) (&server_addr), sizeof(struct sockaddr)) == -1)
{
//DebugMsg("Connect Error:%s", strerror(errno));
return -1;
}
SSL *ssl;
SSL_CTX *ctx;
// SSL initialize
SSL_library_init();
SSL_load_error_strings();
ctx = SSL_CTX_new(SSLv23_client_method());
if (ctx == NULL)
{
//DebugMsg("SSL CTX new failed!");
return -1;
}
ssl = SSL_new(ctx);
if (ssl == NULL)
{
//DebugMsg("SSL new failed!");
return -1;
}
// link socket & SSL
int ret = SSL_set_fd(ssl, sockfd);
if (ret == 0)
{
//DebugMsg("SSL link socket failed!");
return -1;
}
RAND_poll();
while (RAND_status() == 0)
{
unsigned short rand_ret = rand() % 65536;
RAND_seed(&rand_ret, sizeof(rand_ret));
}
// SSL connect
ret = SSL_connect(ssl);
if (ret != 1)
{
//DebugMsg("SSL connect failed!");
return -1;
}
char getRequest[1024];
char *cookie="";
sprintf(getRequest, "GET %s HTTP/1.0\r\nHost: %s\r\nCookie: %s\r\n\r\n", pObject, domain, cookie);
// send https request
int totalsend = 0;
int requestLen = strlen(getRequest);
while (totalsend < requestLen)
{
int send = SSL_write(ssl, getRequest + totalsend, requestLen - totalsend);
if (send == -1)
{
//DebugMsg("SSL send failed!");
}
totalsend += send;
//DebugMsg("%d bytes send OK!", totalsend);
}
// receive https response
int responseLen = 0;
int i = 0;
char buffer[1024];
memset(buffer, 0, sizeof(buffer));
char returnBuffer[1024];
memset(returnBuffer, 0, 1024);
// int p = 0;
// while ((responseLen = SSL_read(ssl, buffer, 1)) == 1 && p<1024)
// {
// returnBuffer[p] = buffer[0];
// p++;
// if (i < 4)
// {
// if (buffer[0] == '\r' || buffer[0] == '\n')
// i++;
// else
// i = 0;
// }
// }
AnsiString result;
while ((responseLen = SSL_read(ssl, buffer, 1024))>0){
result+=buffer;
}
ShowMessage(result);
//DebugMsg("%s", returnBuffer);
// shutdown community
ret = SSL_shutdown(ssl);
if (ret != 1)
{
//DebugMsg("SSL shutdown failed!");
return -1;
}
SSL_free(ssl);
SSL_CTX_free(ctx);
ERR_free_strings();
closesocket(sockfd);
WSACleanup();
return 0;
}
- 使用bcb 调用 openssl库进行https get请求
- 使用HttpClient发送https请求GET方式
- JAVA利用HttpClient进行POST和GET请求(HTTPS)
- curl https get请求
- https GET请求
- 使用openssl实现 https
- 使用HttpClient进行get和post请求
- HTTPS进行网络请求
- 使用htps进行,Get请求和post请求
- Android Https请求调用
- iOS开发中使用AFNetWorking进行https请求
- 使用Retrofit进行Http、Https网络请求(快速上手)
- 使用Charles对Https请求进行抓包
- 使用Charles对Https请求进行抓包
- 使用Charles对Https请求进行抓包
- 使用Charles对Https请求进行抓包
- 使用Retrofit进行Http、Https网络请求(快速上手)
- 使用Swift调用AFNetworking进行网络请求
- SSH的环境搭建的步骤
- C++中空指针调用类成员函数的原理
- 网址收藏
- 解决同一个局域网两个DHCP冲突问题--涉及到局域网IP扫描,主机操作系统扫描,mac地址查询
- 移掉日志中的问号
- 使用bcb 调用 openssl库进行https get请求
- Freemodbus RTU在stm32上的移植分析
- 纹理 2D
- java Class类
- 浙工大2015年校赛 Problem G: You you rhythm master(贪心题)
- 使用ViewPager,设置为wrap_content后没有效果,以及多个view高度不同时ViewPager高度自适应
- HAL/JNI简明笔记(一)——HAL基本框架
- 福利啦,javaweb悬浮广告的js代码
- 一个使用WordNet比较词语相似度的Java包——JWS(Java WordNet Similarity)