您好我想对远程服务器进行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;
}
输出:
答案 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&";
答案 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(可能还有更多的操作系统)上均可使用