#include<iostream>
#include<fstream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<openssl/pem.h>
#include<openssl/bio.h>
#include<openssl/evp.h>
#include<openssl/buffer.h>
#include<openssl/md5.h>
#include<curl/curl.h>
#define POSTURL "http://www.seemmark.com/external-api/external/captcha/v3"
using namespace std;
char * base64Encode(const char *buffer, int length)
{
BIO *bmem = NULL;
BIO *b64 = NULL;
BUF_MEM *bptr;
b64 = BIO_new(BIO_f_base64());
// BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
bmem = BIO_new(BIO_s_mem());
b64 = BIO_push(b64, bmem);
BIO_write(b64, buffer, length);
BIO_flush(b64);
BIO_get_mem_ptr(b64, &bptr);
BIO_set_close(b64, BIO_NOCLOSE);
char *buff = (char *)malloc(bptr->length + 1);
memcpy(buff, bptr->data, bptr->length);
buff[bptr->length] = 0;
BIO_free_all(b64);
return buff;
}
int main(){
int size;
ifstream file("image.png",ios::in|ios::binary|ios::ate);
size = file.tellg();
file.seekg(0,ios::beg);
char buffer[size];
file.read(buffer,size);
file.close();
// for(int i = 0;i < size; i++){
// printf("%c",buffer[i]);
// }
// cout<<size<<endl;
char *buff = base64Encode(buffer,size);
// int i = 0;
// while(buff[i++]!= '\0')
// printf("%c",buff[i]);
// cout<<i<<endl;
string key = "58f0a437e7798958a686bb33";
string codoID = "1001adf11eefe";
string userId = "1234";
string codeID = "codeID=" + codeID;
string image = buff;
image = "image=" + image;
userId = "userId=" + userId;
string param = codeID + "&" + image + "&" + userId + "&" +key;
MD5_CTX ctx;
unsigned char md[16];
char bufs[33] = {'\0'};
char tmp[3] = {'0'};
int i;
const char *ps = param.c_str();
MD5_Init(&ctx);
MD5_Update(&ctx, ps, param.length());
MD5_Final(md, &ctx);
for(i = 0; i < 16;i++)
{
sprintf(tmp, "%02X", md[i]);
strcat(bufs, tmp);
}
// printf("%s\n",bufs);
string sign = bufs;
param = param +"&sign=" + sign;
CURL *curl;
CURLcode res;
struct curl_slist *http_header = NULL;
curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL,POSTURL );
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, param);
// curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
// curl_easy_setopt(curl, CURLOPT_WRITEDATA, fptr);
curl_easy_setopt(curl, CURLOPT_POST, 1);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
curl_easy_setopt(curl, CURLOPT_HEADER, 1);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
// curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/Users/zhu/CProjects/curlposttest.cookie");
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
return 0;
}
网友评论