环境:
- win10
- VS2015
- curl-7.61.1
步骤:
- 准备好libcurl.lib、libcurl.dll
- 搭建好项目目录,并放入curl头文件、libcurl.lib、libcurl.dll,创建好空的.cpp文件
- cmake编译该项目
- 打开.sln文件,进行编程
- 生成解决方案并执行
一、搭建项目目录结构
新建文件夹test,里面目录结构如下,暂且将LIBCURL.DLL文件放置在lib目录下:
- build:放置cmake编译后生成的文件
- include:放置头文件
- src:放置cpp源文件
- lib:放置链接库
- CMakeLists.txt:cmake根据此文件编译项目
编写CMakeLists.txt文件:
cmake_minimum_required(VERSION 2.8.9)
#工程名字
project(test)
#设置
set(CMAKE_BUILD_TYPE Release)
#添加头文件
include_directories(include)
#将src文件中所有的cpp文件交给GLOB子命令,生成一个文件列表,并将列表赋值给SOURCES变量,即SOURCES变量中存放着所有源文件的路径
file(GLOB SOURCES "src/*.cpp")
#第一个参数为最终编译出来的程序名字,第二个参数为编译所需要的代码文件
add_executable(test ${SOURCES})
编写完毕后使用cmake进行编译
二、编写c++源文件
进入build文件夹下,打开test.sln,编辑main.cpp如下:
#include<iostream>
#include<curl/curl.h>
void main(int argc, char **argv) {
CURL *curl;
CURLcode res;
/* 初始化winsock的内容 */
curl_global_init(CURL_GLOBAL_ALL);
/* 获得一个curl的手柄(handle)*/
curl = curl_easy_init();
if (curl) {
/* 设置post请求地址,最好使用https */
curl_easy_setopt(curl, CURLOPT_URL, "http://localhost/sy/controller/index.php");
/* 指定post数据 */
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "name=test&password=123");
/* 执行请求,res将获得返回代码 */
res = curl_easy_perform(curl);
/* 检查错误 */
if (res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
/* 清除链接 */
curl_easy_cleanup(curl);
}
curl_global_cleanup();
}
接收数据文件index.php文件如下:
<?php
$data = ["msg" => "","data" => "" ];
if(!empty($_POST)){
$text = fopen("postdata.txt", "w");
foreach ($_POST as $key => $value) {
fwrite($text, "key =>".$key."\n");
fwrite($text, "value =>".$value."\n");
}
$data = ["msg" => "c++post数据成功","data" => "" ];
fclose($text);
}
echo json_encode($data);
?>
编写完毕之后,在VS界面开始生成解决方案:
项目属性 -> 链接器 -> 输入 -> 依赖项管理,添加LIBCURL.LIB的路径:
开始调试:
将LIBCURL.DLL文件放到生成的.exe文件所在目录下即可。成功运行之后会在index.php文件同一目录下生成postdata.txt文件: