金山快盤開發(六)

 今天寫的就是測試程序了,其實有些事情是我們想得太難了,一開始後就發現挺簡單的。

頭文件:

  1. #ifndef __KUAIPAN__ 
  2. #define __KUAIPAN__ 
  3. 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[]); 
  4. size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream); //這個函數是爲了符合CURLOPT_WRITEFUNCTION, 而構造的   
  5. #endif 

測試主體:

  1. #include <curl/curl.h> 
  2. //#include <curl/types.h>   
  3. #include <curl/easy.h> 
  4. #include <unistd.h> 
  5. #include <stdio.h> 
  6. #include <string.h> 
  7. #include <malloc.h> 
  8. #include <stdlib.h> 
  9. //const char oauth_nonce 
  10. #include "kuaipan.h" 
  11. //#include "cJSON.h" 
  12.  
  13. FILE *fp; //定義FILE類型指針   
  14. int main(int argc, char *argv[])   
  15. {   
  16.   char consumer_key[]="你的consumer_key"
  17.   char consumer_secret[]="你的consumer_secret"
  18.   char oauth_signature_method[]="HMAC-SHA1"
  19.   char oauth_signature[2048]; 
  20.   memset(oauth_signature,0,2048); 
  21.   //char request_method[]="GET"; 
  22.   char http_url1[]="https://openapi.kuaipan.cn/open/requestToken"
  23.   //const char oauth_timestamp; 
  24.   char oauth_version[]="1.0"
  25.   char oauth_timestamp[40]=""
  26.   char oauth_nonce[1024]=""
  27.   strcpy(oauth_nonce,(char*)get_nonce()); 
  28.   sprintf(oauth_timestamp,"%d",(int)time(0)); 
  29.   //char oauth_signature 
  30.   get_signature(http_url1,consumer_key,oauth_nonce,oauth_signature_method, oauth_timestamp, oauth_version,consumer_secret,oauth_signature); 
  31.    
  32.    
  33.   CURL *curl;   
  34.   char url_base[2048]=""
  35.   //strncpy(url_base,http_url1,strlen(http_url1)); 
  36.    
  37.   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); 
  38.   printf("%s\n",url_base); 
  39.   curl_global_init(CURL_GLOBAL_ALL);     
  40.   curl=curl_easy_init();   
  41.   curl_easy_setopt(curl, CURLOPT_URL,url_base);     
  42.  
  43.   if((fp=fopen("touch.txt","w"))==NULL)   
  44.   {   
  45.       curl_easy_cleanup(curl);   
  46.       exit(1);   
  47.   }   
  48.   curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); //CURLOPT_WRITEFUNCTION 將後繼的動作交給write_data函數處理   
  49.   curl_easy_perform(curl);   
  50.   curl_easy_cleanup(curl);   
  51.   //exit(0);   
  52.   return 0; 
  53. 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[]) 
  54.   //char* oauth_signature=(char*)malloc(1024*sizeof(char)); 
  55.   char obj[1024]="",d[1024]="",out[1024]=""
  56.   int lk=0,ld=0,t=0; 
  57.   //char url[1024]=""; 
  58.   char consumer_key[1024]=""
  59.   char nonce[1024]="";    
  60.   char signature_method[1024]="";   
  61.   char timestamp[1024]=""
  62.   char version[1024]=""
  63.   //sprintf(url,"%s& 
  64.   sprintf(consumer_key,"oauth_consumer_key=%s",oauth_consumer_key); 
  65.   sprintf(nonce,"&oauth_nonce="); 
  66.   sprintf(signature_method,"&oauth_signature_method=%s",oauth_signature_method); 
  67.   sprintf(timestamp,"&oauth_timestamp=%s",oauth_timestamp); 
  68.   sprintf(version,"&oauth_version=%s",oauth_version); 
  69.    
  70.   strcat(d,"GET&"); 
  71.   //printf("src=%s\n",d); 
  72.   //strcat(d,"&",1); 
  73.   URLEncode(http_url,strlen(http_url),obj,1024); 
  74.   strcat(d,obj); 
  75.   //printf("src=%s\n",d); 
  76.   strcat(d,"&"); 
  77.   URLEncode(consumer_key,strlen(consumer_key),obj,1024); 
  78.   strcat(d,obj); 
  79.   //printf("src=%s\n",d); 
  80.   URLEncode(nonce,strlen(nonce),obj,1024); 
  81.   strcat(d,obj); 
  82.   strcat(d,oauth_nonce); 
  83.   //printf("src=%s\n",d); 
  84.   URLEncode(signature_method,strlen(signature_method),obj,1024); 
  85.   strcat(d,obj); 
  86.   //printf("src=%s\n",d); 
  87.   URLEncode(timestamp,strlen(timestamp),obj,1024); 
  88.   strcat(d,obj); 
  89.   URLEncode(version,strlen(version),obj,1024); 
  90.   strcat(d,obj); 
  91.   printf("src=%s\n%d\n",d,strlen(d)); 
  92.   ld=strlen(d); 
  93.   lk=strlen(consumer_secret); 
  94.   char *hmac_shastr=(char*)hmac_sha(consumer_secret,lk,d,ld,out,20); 
  95.   int hmac_shalen=strlen(hmac_shastr); 
  96.   printf("hmac_shastr=%s\n",hmac_shastr); 
  97.   int base64_encodelen=strlen((char*)base64_encode(hmac_shastr, hmac_shalen)); 
  98.   URLEncode(base64_encode(hmac_shastr,hmac_shalen),base64_encodelen,obj,1024); 
  99.   strcat(oauth_signature,obj); 
  100.   //strcat(oauth_signature,"\0"); 
  101.   printf("%s\n%d\n",oauth_signature,strlen(oauth_signature)); 
  102.    
  103.   //return oauth_signature; 
  104.  
  105.  
  106. size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream) //這個函數是爲了符合CURLOPT_WRITEFUNCTION, 而構造的   
  107. {   
  108.     int written = fwrite(ptr, size, nmemb, (FILE *)fp);   
  109.     return written;   
  110. }   

makefile:

  1. obj=kuaipan.o base64.o url_encode.o hmac_sha1.o oauth_nonce.o 
  2. kuaipan:$(obj) 
  3.     gcc -o kuaipan $(obj) -lcurl 
  4.      
  5. kuaipan.o:kuaipan.c kuaipan.h 
  6.     gcc -c kuaipan.c -g 
  7. base64.o:base64.c base64.h 
  8.     gcc -c base64.c -g 
  9. url_encode.o:url_encode.c url_encode.h 
  10.     gcc -c url_encode.c -g 
  11. hmac_sha1.o:hmac_sha1.c hmac_sha1.h 
  12.     gcc -c hmac_sha1.c -g 
  13. oauth_nonce.o:oauth_nonce.c oauth_nonce.h 
  14.     gcc -c oauth_nonce.c -g 
  15. clean: 
  16.     rm -f *.o 

已經經過測試了,所以應該是沒有問題的,代碼風格可能比較亂。

再編譯時需要libcurl的庫,所以沒有庫的話就會出問題

今天就不上傳代碼了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章