今天写的就是测试程序了,其实有些事情是我们想得太难了,一开始后就发现挺简单的。
头文件:
- #ifndef __KUAIPAN__
- #define __KUAIPAN__
- void get_signature(char* http_url,char* oauth_consumer_key,char* oauth_nonce, char* oauth_signature_method,char* oauth_timestamp, char* oauth_version,char* consumer_secret,char oauth_signature[]);
- size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream); //这个函数是为了符合CURLOPT_WRITEFUNCTION, 而构造的
- #endif
测试主体:
- #include
- //#include
- #include
- #include
- #include
- #include
- #include
- #include
- //const char oauth_nonce
- #include "kuaipan.h"
- //#include "cJSON.h"
- FILE *fp; //定义FILE类型指针
- int main(int argc, char *argv[])
- {
- char consumer_key[]="你的consumer_key";
- char consumer_secret[]="你的consumer_secret";
- char oauth_signature_method[]="HMAC-SHA1";
- char oauth_signature[2048];
- memset(oauth_signature,0,2048);
- //char request_method[]="GET";
- char http_url1[]="https://openapi.kuaipan.cn/open/requestToken";
- //const char oauth_timestamp;
- char oauth_version[]="1.0";
- char oauth_timestamp[40]="";
- char oauth_nonce[1024]="";
- strcpy(oauth_nonce,(char*)get_nonce());
- sprintf(oauth_timestamp,"%d",(int)time(0));
- //char oauth_signature
- get_signature(http_url1,consumer_key,oauth_nonce,oauth_signature_method, oauth_timestamp, oauth_version,consumer_secret,oauth_signature);
- CURL *curl;
- char url_base[2048]="";
- //strncpy(url_base,http_url1,strlen(http_url1));
- sprintf(url_base,"%s?oauth_signature=%s&oauth_consumer_key=%s&oauth_nonce=%s&oauth_signature_method=HMAC-SHA1&oauth_timestamp=%s&oauth_version=1.0",http_url1,oauth_signature,consumer_key,oauth_nonce,oauth_timestamp);
- printf("%s\n",url_base);
- curl_global_init(CURL_GLOBAL_ALL);
- curl=curl_easy_init();
- curl_easy_setopt(curl, CURLOPT_URL,url_base);
- if((fp=fopen("touch.txt","w"))==NULL)
- {
- curl_easy_cleanup(curl);
- exit(1);
- }
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); //CURLOPT_WRITEFUNCTION 将后继的动作交给write_data函数处理
- curl_easy_perform(curl);
- curl_easy_cleanup(curl);
- //exit(0);
- return 0;
- }
- void get_signature(char* http_url,char* oauth_consumer_key,char* oauth_nonce, char* oauth_signature_method,char* oauth_timestamp, char* oauth_version,char* consumer_secret,char oauth_signature[])
- {
- //char* oauth_signature=(char*)malloc(1024*sizeof(char));
- char obj[1024]="",d[1024]="",out[1024]="";
- int lk=0,ld=0,t=0;
- //char url[1024]="";
- char consumer_key[1024]="";
- char nonce[1024]="";
- char signature_method[1024]="";
- char timestamp[1024]="";
- char version[1024]="";
- //sprintf(url,"%s&
- sprintf(consumer_key,"oauth_consumer_key=%s",oauth_consumer_key);
- sprintf(nonce,"&oauth_nonce=");
- sprintf(signature_method,"&oauth_signature_method=%s",oauth_signature_method);
- sprintf(timestamp,"&oauth_timestamp=%s",oauth_timestamp);
- sprintf(version,"&oauth_version=%s",oauth_version);
- strcat(d,"GET&");
- //printf("src=%s\n",d);
- //strcat(d,"&",1);
- URLEncode(http_url,strlen(http_url),obj,1024);
- strcat(d,obj);
- //printf("src=%s\n",d);
- strcat(d,"&");
- URLEncode(consumer_key,strlen(consumer_key),obj,1024);
- strcat(d,obj);
- //printf("src=%s\n",d);
- URLEncode(nonce,strlen(nonce),obj,1024);
- strcat(d,obj);
- strcat(d,oauth_nonce);
- //printf("src=%s\n",d);
- URLEncode(signature_method,strlen(signature_method),obj,1024);
- strcat(d,obj);
- //printf("src=%s\n",d);
- URLEncode(timestamp,strlen(timestamp),obj,1024);
- strcat(d,obj);
- URLEncode(version,strlen(version),obj,1024);
- strcat(d,obj);
- printf("src=%s\n%d\n",d,strlen(d));
- ld=strlen(d);
- lk=strlen(consumer_secret);
- char *hmac_shastr=(char*)hmac_sha(consumer_secret,lk,d,ld,out,20);
- int hmac_shalen=strlen(hmac_shastr);
- printf("hmac_shastr=%s\n",hmac_shastr);
- int base64_encodelen=strlen((char*)base64_encode(hmac_shastr, hmac_shalen));
- URLEncode(base64_encode(hmac_shastr,hmac_shalen),base64_encodelen,obj,1024);
- strcat(oauth_signature,obj);
- //strcat(oauth_signature,"\0");
- printf("%s\n%d\n",oauth_signature,strlen(oauth_signature));
- //return oauth_signature;
- }
- size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream) //这个函数是为了符合CURLOPT_WRITEFUNCTION, 而构造的
- {
- int written = fwrite(ptr, size, nmemb, (FILE *)fp);
- return written;
- }
makefile:
- obj=kuaipan.o base64.o url_encode.o hmac_sha1.o oauth_nonce.o
- kuaipan:$(obj)
- gcc -o kuaipan $(obj) -lcurl
- kuaipan.o:kuaipan.c kuaipan.h
- gcc -c kuaipan.c -g
- base64.o:base64.c base64.h
- gcc -c base64.c -g
- url_encode.o:url_encode.c url_encode.h
- gcc -c url_encode.c -g
- hmac_sha1.o:hmac_sha1.c hmac_sha1.h
- gcc -c hmac_sha1.c -g
- oauth_nonce.o:oauth_nonce.c oauth_nonce.h
- gcc -c oauth_nonce.c -g
- clean:
- rm -f *.o
已经经过测试了,所以应该是没有问题的,代码风格可能比较乱。
再编译时需要libcurl的库,所以没有库的话就会出问题
今天就不上传代码了。