x86
./config no-asm shared --prefix=/home/zhanggf/workspace/1.opensource/openssl-1.1.1g/x86_output
arm
./Configure no-asm shared linux-generic32 --prefix=/home/zhanggf/workspace/1.opensource/openssl-1.0.1u/arm_output --cross-compile-prefix=arm-linux-
make &&make install
不定义 linux-generic32 会出现ssl handshark decode error
2. 下载libcrul curl-7.51.0.tar.gz
./configure --prefix=/home/zhanggf/workspace/1.opensource/curl-7.51.0/x86_output --with-ssl=//home/zhanggf/workspace/1.opensource/openssl-1.0.1u/x86_output
make make install
测试:
#include
#include
#include
size_t write_data(void* buffer,size_t size,size_t nmemb,void *stream)
{
FILE *fptr = (FILE*)stream;
fwrite(buffer,size,nmemb,fptr);
//printf("buf:%s\n", buffer);
return size*nmemb;
}
char *pszBuf = "{\"message_index\":123456,\"gateway_id\":\"00001234\",\"gateway_ip\":\"192.168.1.199\",\"gateway_mac\":\"11:22:33:44:55:66\",\"device_number\":\"2\",\"camera_devices\":[{\"device_ip\":\"192.168.1.200\",\"device_type\":\"IPC-HFS7841-Z-LED-JG\",\"device_mac\":\"11:22:33:44:55:66\",\"device_stat\":\"online\",\"device_SerialNo\":\"123456789012\",\"device_SoftVersion\":\"1.1.1\",\"device_PassWord\":\"online\",\"device_UserName\":\"online\"},{\"device_ip\":\"192.168.1.200\",\"device_type\":\"IPC-HFS7841-Z-LED-JG\",\"device_mac\":\"11:22:33:44:55:66\",\"device_SerialNo\":\"123456789012\",\"device_SoftVersion\":\"1.1.1\",\"device_PassWord\":\"online\",\"device_UserName\":\"online\"}]}";
static int OnDebug(CURL *, curl_infotype itype, char * pData, size_t size, void *)
{
if(itype == CURLINFO_TEXT)
{
//printf("[TEXT]%s\n", pData);
}
else if(itype == CURLINFO_HEADER_IN)
{
printf("[HEADER_IN]%s\n", pData);
}
else if(itype == CURLINFO_HEADER_OUT)
{
printf("[HEADER_OUT]%s\n", pData);
}
else if(itype == CURLINFO_DATA_IN)
{
printf("[DATA_IN]%s\n", pData);
}
else if(itype == CURLINFO_DATA_OUT)
{
printf("[DATA_OUT]%s\n", pData);
}
return 0;
}
#if 1
int main()
{
CURLcode res;
CURL* curl = curl_easy_init();
if (NULL == curl)
{
printf("Init failed;\n");
return CURLE_FAILED_INIT;
}
printf("Init success\n");
if ( true )//用于调试的设置
{
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, OnDebug);
}
curl_easy_setopt(curl, CURLOPT_URL, "https://zhtc.huaching.com/ths_proxy/park-service/cameraPark/reportData/heartbeat");
curl_easy_setopt(curl, CURLOPT_POST, 1);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, pszBuf);
curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION,write_data);
//curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&strResponse);
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS, 3000);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 300);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1); //支持服务器跳转
curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L); // enable TCP keep-alive for this transfer
curl_easy_setopt(curl, CURLOPT_TCP_KEEPIDLE, 120L); // keep-alive idle time to 120 seconds
curl_easy_setopt(curl, CURLOPT_TCP_KEEPINTVL, 60L); // interval time between keep-alive probes: 60 seconds
struct curl_slist* headers = NULL;
headers = curl_slist_append(headers, "Content-Type:application/json;charset=UTF-8");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_POST, 1);//设置为非0表示本次操作为POST
printf("Start curl\n");
res = curl_easy_perform(curl);
printf("end curl\n");
curl_easy_cleanup(curl);
curl_slist_free_all (headers);
return res;
//retur 0;
}
#else
int main(int argc, char *argv[])
{
CURL *curl;
CURLcode res;
char szBuf[1024 * 10 + 1];
struct curl_httppost *formpost=NULL;
struct curl_httppost *lastptr=NULL;
struct curl_slist *headerlist=NULL;
static const char buf[] = "Expect:";
curl_global_init(CURL_GLOBAL_ALL);
/* Fill in the file upload field */
#if 1
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "file",
CURLFORM_FILE, "./1234.png",
CURLFORM_END);
#else
curl_formadd(&formpost, &lastptr, CURLFORM_PTRNAME, "file", CURLFORM_FILE, "./11.png", CURLFORM_PTRCONTENTS, szBuf, CURLFORM_CONTENTSLENGTH, 1024 * 10, CURLFORM_END);
#endif
/* Fill in the filename field */
/*curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "filename",
CURLFORM_COPYCONTENTS, "sign.txt",
CURLFORM_END);
*/
/* Fill in the submit field too, even if this is rarely needed */
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "gateway_id", CURLFORM_COPYCONTENTS, "00000123", CURLFORM_END);
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "space_num", CURLFORM_COPYCONTENTS, "001", CURLFORM_END);
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "license", CURLFORM_COPYCONTENTS, "京A12345", CURLFORM_END);
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "plate_type", CURLFORM_COPYCONTENTS, "Normal", CURLFORM_END);
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "plate_color", CURLFORM_COPYCONTENTS, "Blue", CURLFORM_END);
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "date", CURLFORM_COPYCONTENTS, "2020-11-20 18:00:00", CURLFORM_END);
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "device_ip", CURLFORM_COPYCONTENTS, "192.168.1.1", CURLFORM_END);
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "device_type", CURLFORM_COPYCONTENTS, "IPC", CURLFORM_END);
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "device_mac", CURLFORM_COPYCONTENTS, "11:11:22:22:33:44", CURLFORM_END);
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "message_index", CURLFORM_COPYCONTENTS, "1", CURLFORM_END);
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "protocol_version", CURLFORM_COPYCONTENTS, "1.0.0", CURLFORM_END);
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "submit",
CURLFORM_COPYCONTENTS, "Submit",
CURLFORM_END);
curl = curl_easy_init();
/* initalize custom header list (stating that Expect: 100-continue is not
wanted */
headerlist = curl_slist_append(headerlist, buf);
if(curl) {
/* what URL that receives this POST */
curl_easy_setopt(curl, CURLOPT_URL, "https://zhtc.huaching.com/ths_proxy/park-service/cameraPark/reportData/carIn");
if ( (argc == 2) && (!strcmp(argv[1], "noexpectheader")) )
/* only disable 100-continue header if explicitly requested */
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,write_data);
/* Perform the request, res will get the return code */
res = curl_easy_perform(curl);
/* Check for errors */
if(res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
/* always cleanup */
curl_easy_cleanup(curl);
/* then cleanup the formpost chain */
curl_formfree(formpost);
/* free slist */
curl_slist_free_all (headerlist);
}
return 0;
}
#endif