#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <oauth.h>
/*
* a example requesting and parsing a request-token from an OAuth service-provider
* excercising the oauth-HTTP GET function. - it is almost the same as
* /ref request_token_example_post below.
*/
void request_token_example_get(void) {
#if 0
const char *request_token_uri = "http://oauth-sandbox.mediamatic.nl/module/OAuth/request_token";
const char *req_c_key = "17b09ea4c9a4121145936f0d7d8daa28047583796"; //< consumer key
const char *req_c_secret = "942295b08ffce77b399419ee96ac65be"; //< consumer secret
#else
const char *request_token_uri = "http://term.ie/oauth/example/request_token.php";
const char *req_c_key = "key"; //< consumer key
const char *req_c_secret = "secret"; //< consumer secret
#endif
char *res_t_key = NULL; //< replied key
char *res_t_secret = NULL; //< replied secret
char *req_url = NULL;
char *reply;
req_url = oauth_sign_url2(request_token_uri, NULL, OA_HMAC, NULL, req_c_key, req_c_secret, NULL, NULL);
printf("request URL:%s/n/n", req_url);
reply = oauth_http_get(req_url,NULL);
if (!reply)
printf("HTTP request for an oauth request-token failed./n");
else {
// parse reply - example:
//"oauth_token=2a71d1c73d2771b00f13ca0acb9836a10477d3c56&oauth_token_secret=a1b5c00c1f3e23fb314a0aa22e990266"
int rc;
char **rv = NULL;
printf("HTTP-reply: %s/n", reply);
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) ){
res_t_key=strdup(&(rv[0][12]));
res_t_secret=strdup(&(rv[1][19]));
printf("key: '%s'/nsecret: '%s'/n",res_t_key, res_t_secret);
}
if(rv) free(rv);
}
if(req_url) free(req_url);
if(reply) free(reply);
if(res_t_key) free(res_t_key);
if(res_t_secret) free(res_t_secret);
}
/*
* a example requesting and parsing a request-token from an OAuth service-provider
* using the oauth-HTTP POST function.
*/
void request_token_example_post(void) {
#if 0
const char *request_token_uri = "http://oauth-sandbox.mediamatic.nl/module/OAuth/request_token";
const char *req_c_key = "17b09ea4c9a4121145936f0d7d8daa28047583796"; //< consumer key
const char *req_c_secret = "942295b08ffce77b399419ee96ac65be"; //< consumer secret
#else
const char *request_token_uri = "http://term.ie/oauth/example/request_token.php";
const char *req_c_key = "key"; //< consumer key
const char *req_c_secret = "secret"; //< consumer secret
#endif
char *res_t_key = NULL; //< replied key
char *res_t_secret = NULL; //< replied secret
char *postarg = NULL;
char *req_url;
char *reply;
req_url = oauth_sign_url2(request_token_uri, &postarg, OA_HMAC, NULL, req_c_key, req_c_secret, NULL, NULL);
printf("request URL:%s/n/n", req_url);
reply = oauth_http_post(req_url,postarg);
if (!reply)
printf("HTTP request for an oauth request-token failed./n");
else {
//parse reply - example:
//"oauth_token=2a71d1c73d2771b00f13ca0acb9836a10477d3c56&oauth_token_secret=a1b5c00c1f3e23fb314a0aa22e990266"
int rc;
char **rv = NULL;
printf("HTTP-reply: %s/n", reply);
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) ){
res_t_key=strdup(&(rv[0][12]));
res_t_secret=strdup(&(rv[1][19]));
printf("key: '%s'/nsecret: '%s'/n",res_t_key, res_t_secret);
}
if(rv) free(rv);
}
if(req_url) free(req_url);
if(postarg) free(postarg);
if(reply) free(reply);
if(res_t_key) free(res_t_key);
if(res_t_secret) free(res_t_secret);
}
/*
* Main Test and Example Code.
*
* compile:
* gcc -lssl -loauth -o oauthtest oauthtest.c
*/
int main (int argc, char **argv) {
int fail=0;
const char *url = "http://base.url/&just=append?post=or_get_parameters"
"&arguments=will_be_formatted_automatically?&dont_care"
"=about_separators";
//< the url to sign
const char *c_key = "1234567890abcdef1234567890abcdef123456789";
//< consumer key
const char *c_secret = "01230123012301230123012301230123";
//< consumer secret
const char *t_key = "0987654321fedcba0987654321fedcba098765432";
//< token key
const char *t_secret = "66666666666666666666666666666666";
//< token secret
#if 1 // example sign GET request and print the signed request URL
{
char *geturl = NULL;
geturl = oauth_sign_url2(url, NULL, OA_HMAC, NULL, c_key, c_secret, t_key, t_secret);
printf("GET: URL:%s/n/n", geturl);
if(geturl) free(geturl);
}
#endif
#if 1 // sign POST ;) example
{
char *postargs = NULL, *post = NULL;
post = oauth_sign_url2(url, &postargs, OA_HMAC, NULL, c_key, c_secret, t_key, t_secret);
printf("POST: URL:%s/n PARAM:%s/n/n", post, postargs);
if(post) free(post);
if(postargs) free(postargs);
}
#endif
printf(" *** sending HTTP request *** /n/n");
// These two will perform a HTTP request, requesting an access token.
// it's intended both as test (verify signature)
// and example code.
#if 1 // POST a request-token request
request_token_example_post();
#endif
#if 1 // GET a request-token
request_token_example_get();
#endif
return (fail?1:0);
}
twitter_oauthtest.c
最新推荐文章于 2024-08-16 16:54:11 发布