c中的RESTful客户端

时间:2014-12-18 05:14:02

标签: c http restful-url

您好我想对远程服务器进行RESTful调用。 网址为http://bulksms.net/API.svc/sms/json/sendmessage?username=newuser&password=newpasswd&msg=test&msisdn=9999999999&tagname=Demo&shortcode=8888&telcoId=5&dnRequired=false 服务器文档说:

Parameters

string username,string password,string msg,string msisdn,string tagname,string shortcode,int telcoId,bool dnRequired

返回值 API将返回并包含三个成员的对象 IsSuccess 信息 唯一ID

我在c中制作了一个示例客户端,但它不起作用。下面是我的代码。

#include <stdio.h>
#include <stdlib.h>
#include <curl/curl.h>

int main(int argc, char *argv[])
{
  CURL *curl;
  char url[80];
  CURLcode res;

  strcpy(url,"http://bulksms.net/API.svc/sms/json/sendmessage?username=newuser&password=newpasswd&msg=test&msisdn=9999999999&tagname=Demo&shortcode=8888&telcoId=5&");

  curl = curl_easy_init();
  if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, url);
    curl_easy_setopt(curl, CURLOPT_POST, url);

    res = curl_easy_perform(curl);
    curl_easy_cleanup(curl);
  }
  return 0;
}

输出:

4 个答案:

答案 0 :(得分:2)

我解决了这个问题。实际上在RESTful POST方法中,url和数据应该逐个添加。下面是用于RESTfull POST方法的c中的成功客户端。

#include <stdio.h>
#include <stdlib.h>
#include <curl/curl.h>

int main(int argc, char *argv[])
{
  CURL *curl;
  CURLcode res;
  char url[]= "http://bulksms.net/API.svc/sms/json/sendmessage";
  char postData[] = "username=newuser&password=newpasswd&msg=test&msisdn=9999999999&tagname=Demo&shortcode=8888&telcoId=5&dnRequired=false";
  curl = curl_easy_init();
  if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, url);
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);
    res = curl_easy_perform(curl);
    curl_easy_cleanup(curl);
  }
  return 0;
}

答案 1 :(得分:1)

您的strcpy函数会导致未定义的行为,因为您的缓冲区为80个字符,而源字符串就更多了。

尝试这样的事情。

char url[]="http://bulksms.net/API.svc/sms/json/sendmessage?username=newuser&password=newpasswd&msg=test&msisdn=9999999999&tagname=Demo&shortcode=8888&telcoId=5&";

您可以使用strncpysnprintf进行安全复制,避免未定义的行为。

答案 2 :(得分:0)

与基于SOAP的Web服务不同,没有&#34;官方&#34; RESTful Web API的标准。这是因为REST是一种架构风格,而SOAP是一种协议。尽管REST本身并不是标准,但大多数RESTful实现都使用HTTP,URI,JSON和XML等标准。

答案 3 :(得分:0)

我知道这是一个迟来的答案,但是有一个完整且很棒的库,可让您通过C / C ++引入您的Restful api。在Linux,Freebsd和Windows(可能还有更多的操作系统)上均可使用

github https://github.com/babelouest/ulfius