twitter_oauthexample.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <oauth.h>

int parse_reply(const char *reply, char **token, char **secret) {
  int rc;
  int ok=1;
  char **rv = NULL;
  rc = oauth_split_url_parameters(reply, &rv);
  qsort(rv, rc, sizeof(char *), oauth_cmpstringp);
  if( rc==2
      && !strncmp(rv[0],"oauth_token=",11)
      && !strncmp(rv[1],"oauth_token_secret=",18) ) {
    ok=0;
    if (token)  *token =strdup(&(rv[0][12]));
    if (secret) *secret=strdup(&(rv[1][19]));
    printf("key:    '%s'/nsecret: '%s'/n",*token, *secret); // XXX token&secret may be NULL.
  }
  if(rv) free(rv);
  return ok;
}

int oauth_consumer_example(int use_post) {
  const char *request_token_uri = "http://term.ie/oauth/example/request_token.php";
  const char *access_token_uri = "http://term.ie/oauth/example/access_token.php";
  const char *test_call_uri = "http://term.ie/oauth/example/echo_api.php?method=foo%20bar&bar=baz";
  const char *c_key         = "key"; //< consumer key
  const char *c_secret      = "secret"; //< consumer secret

  char *t_key    = NULL; //< access token key
  char *t_secret = NULL; //< access token secret

  char *req_url = NULL;
  char *postarg = NULL;
  char *reply   = NULL;

  printf("Request token../n");
  if (use_post) { // HTTP POST
    req_url = oauth_sign_url2(request_token_uri, &postarg, OA_HMAC, NULL, c_key, c_secret, NULL, NULL);
    reply = oauth_http_post(req_url,postarg);
  } else { // HTTP GET
    req_url = oauth_sign_url2(request_token_uri, NULL, OA_HMAC, NULL, c_key, c_secret, NULL, NULL);
    reply = oauth_http_get(req_url,postarg);
  }
  if (req_url) free(req_url);
  if (postarg) free(postarg);
  if (!reply) return(1);
  if (parse_reply(reply, &t_key, &t_secret)) return(2);
  free(reply);

  // The Request Token provided above is already authorized, for this test server
  // so we may use it to request an Access Token right away.

  printf("Access token../n");

  if (use_post) {
    req_url = oauth_sign_url2(access_token_uri, &postarg, OA_HMAC, NULL, c_key, c_secret, t_key, t_secret);
    reply = oauth_http_post(req_url,postarg);
  } else {
    req_url = oauth_sign_url2(access_token_uri, NULL, OA_HMAC, NULL, c_key, c_secret, t_key, t_secret);
    reply = oauth_http_get(req_url,postarg);
  }
  if (req_url) free(req_url);
  if (postarg) free(postarg);
  if (!reply) return(3);
  if(t_key) free(t_key);
  if(t_secret) free(t_secret);
  if (parse_reply(reply, &t_key, &t_secret)) return(4);
  free(reply);

  printf("make some request../n");

  if (use_post) {
    req_url = oauth_sign_url2(test_call_uri, &postarg, OA_HMAC, NULL, c_key, c_secret, t_key, t_secret);
    reply = oauth_http_post(req_url,postarg);
  } else {
    req_url = oauth_sign_url2(test_call_uri, NULL, OA_HMAC, NULL, c_key, c_secret, t_key, t_secret);
    reply = oauth_http_get(req_url,postarg);
  }
  printf("query:'%s'/n",req_url);
  printf("reply:'%s'/n",reply);
  if(req_url) free(req_url);
  if(postarg) free(postarg);

  if (strcmp(reply,"bar=baz&method=foo+bar")) return (5);

  if(reply) free(reply);
  if(t_key) free(t_key);
  if(t_secret) free(t_secret);

  return(0);
}


int main (int argc, char **argv) {
  switch(oauth_consumer_example(0)) {
    case 1:
      printf("HTTP request for an oauth request-token failed./n");
      break;
    case 2:
      printf("did not receive a request-token./n");
      break;
    case 3:
      printf("HTTP request for an oauth access-token failed./n");
      break;
    case 4:
      printf("did not receive an access-token./n");
      break;
    case 5:
      printf("test call 'echo-api' did not respond correctly./n");
      break;
    default:
      printf("request ok./n");
      break;
  }
  return(0);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值