openssl的安装以及关于curl库HTTP post|get代码的编写

通过之前对的lic流程我们可以用get去抓取http协议上的内容,但是面对人脸识别中的https协议却没有办法,连接不上,错误代码总显示3。
原因是我们没有安装openSSL,https=http+SSL。
安装openSSL流程
1.1、下载openssl源码

wget https://ftp.openssl.org/source/old/1.1.1/openssl-1.1.1i.tar.gz

1.2、解压、配置、编译并安装

1.tar -xzf openssl-1.1.1i.tar.gz
2.cd openssl-1.1.1i/

 1. ./config//(不加任何参数就等于编译后放入默认路劲底下)
 2. make -j4
 3.  sudo make install

最后再curl库中编译要加上参数./configure --prefix=$PWD/__install --with-ssl=/opt/OpenSSL

这样就完成了,可以访问上https协议的网站了

https协议post请求的编写,基于祥云ocr实现的人脸识别代码。
其中代码解析。
1.CURLcode curl_global_init(long flags)
如果它在curl_easy_init()之前未调用,将由libcur库自己调用,所以在多线程中应该主动调用curl_easy_init(),把它放入主线程中,以免子线程再次调用。
参数

flags
CURL_GLOBAL_ALL                      //初始化所有的可能的调用。(常用)
CURL_GLOBAL_SSL                      //初始化支持 安全套接字层。
CURL_GLOBAL_WIN32            //初始化win32套接字库。
CURL_GLOBAL_NOTHING         //没有额外的初始化。

2.void curl_easy_cleanup(void)
用来对curl_global_init做清理工作,相当与close函数。

3.CURL *curl_easy_init( );
用来初始化一个CURL的指针(相当于文件编程中的fd,和socket编程里的返回值),相应的在调用结束时要用curl_easy_cleanup函数清理。

4.CURLcode curl_easy_perform(CURL *handle)里面放入,CURL指针这相当于一个舞台去展现事先执行CURL,放到所有配置完毕之后去执行。

6.CURLcode curl_easy_setopt(CURL *handle, CURLoption option,parameter);
parameter是由option来决定的。

option参数选择(我所用到的)
1.CURLOPT_POSTFIELDS 一个是去post请求,后面是一个指针存放相关的参数(在代码中我所使用的是,sprintf()去写入进去)。
2. CURLOPT_URL指定URL,后面是你要登录的网址,
3.CURLOPT_WRITEFUNCTION  CURLOPT_READDATA两个
CURLOPT_WRITEFUNCTION
是制作一个函数size_t readfunction(void* ptr,size_t size,size_t nmemb,void * stream)其中ptr是用来指向网址返回过来的内容。(直接将函数名放到后面即可)
CURLOPT_READDAT
表明CURLOPT_READFUNCTION函数原型中的stream指针来源,用发是可以定义一个文件后面放入文件标识符即可。
在这里插入代码片
```#include <stdio.h>
#include <curl/curl.h>

#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

#define true 1
#define false 0
typedef unsigned int bool;

size_t readfunction(void* ptr,size_t size,size_t nmemb,void * stream)
{
        char buf[1024];
        char *p=(char *)ptr;
        strncpy(buf,(char *)ptr,1024);



        printf("1:%s,2:%s\n",p,buf);
        printf("=============================================get data=======================================\n");

}


                                  
bool postUrl( )
{
        CURL *curl;
        CURLcode res;

        char *postString;

        char *img1[10];
        char *img2[10];
        char *key="自己的";
        char *secret="自己的";
        int   typeId=21;
        char *format="xml";


        system("base64 shentian1.jpg > tmpfile");
        int fd=open("tmpfile",O_RDWR);
        int moint=lseek(fd,0,SEEK_END);
        lseek(fd,0,SEEK_SET);
        char *buf=(char *)malloc(moint+2);
        memset(buf,'\0',moint+2);
        read(fd,buf,moint);
        system("base64 shentian2.jpg > tmpfile2");
        int fd2=open("tmpfile2",O_RDWR);
        int moint2=lseek(fd2,0,SEEK_END);
        lseek(fd2,0,SEEK_SET);
        char *buf2=(char *)malloc(moint2+2);
        memset(buf2,'\0',moint+2);
        read(fd2,buf2,moint2);
        close(fd2);

        int len=strlen(key)+strlen(secret)+strlen(buf)+strlen(buf2)+124;
        postString=(char *)malloc(len);
        memset(postString,'\0',len);
        sprintf(postString,"&img1=%s&img2=%s&key=%s&secret=%s&typeId=%d&format=%s","buf","buf2",key,secret,typeId,format);

        curl = curl_easy_init();
        if (curl)
        {
                curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookie.txt"); // 指定cookie文件
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postString);    // 指定post内容
                curl_easy_setopt(curl, CURLOPT_URL, "https://netocr.com/api/faceliu.do");   // 指定url
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION,readfunction); //将返回的http头输出到函数readfuction

                res = curl_easy_perform(curl);
                printf("complete:%d\n",res);
                curl_easy_cleanup(curl);
        }

        return true;
}
int main(void)
{

        postUrl();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值