C语言发post请求数据
程序, 工作需要,网上查资料N篇,作为半路出家学编程的,走过了N个坑,终于完成以下的测试程序。 使用了curl的库, 这样无论在windows或者在linux都可以使用. win下的编程环境是TDM-GCC-64, 怎样安装,
也是另一个话题。需要这个的请自行上网查询怎样安装. linux 下是gcc环境,最好先安装curl开发包,目的就是需要curl.h等文件, 怎样安装,也是另一个话题。 废话不说,以下是正式程序. #include #include #include #include struct string { char *ptr size_t len }void init_string(struct string *s) { s->len = 0 s->ptr = malloc(s->len + 1) if (s->ptr == NULL) { fprintf(stderr, "malloc() failed ") exit(EXIT_FAILURE) } s->ptr[0] = '' } size_t writefunc(void *ptr, size_t size, size_t nmemb, struct string *s) { size_t new_len = s->len + size * nmemb s->ptr = realloc()(s->ptr, new_len + 1) if (s->ptr == NULL) { fprintf(stderr, "realloc() failed ") exit(EXIT_FAILURE) } memcpy(s->ptr + s->len, ptr, size*nmemb) s->ptr[new_len] = '' s->len = new_lenreturn size * nmemb } CURLcode curl_post_req(char *url, char *postParams,struct curl_slist *headers, char *response) { CURL *curl curl = curl_easy_init()//初始化 // curl返回值 CURLcode res if (curl) { struct string s init_string(&s) curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers)//curl_easy_setopt(curl, CURLOPT_URL, "http://httpbin.org/post") curl_easy_setopt(curl, CURLOPT_URL, url) curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writefunc) curl_easy_setopt(curl, CURLOPT_WRITEDATA, &s) curl_easy_setopt(curl, CURLOPT_POST, 1)//设置CURLOPT_POST之后必须带有POST数据 curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postParams) //不接收响应头数据0代表不接收 1代表接收 curl_easy_setopt(curl, CURLOPT_HEADER, 0) curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L) //CURLOPT_VERBOSE的值为1时,会显示详细的调试信息 curl_easy_setopt(curl, CURLOPT_VERBOSE, 0) curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL) curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1)//设置超时时间,以秒来计算 CURLOPT_CONNECTTIMEOUT是连接超时 curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10) curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10) // https ssl 时需要用到,如果是 http 可以注释掉 curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L) curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L)res = curl_easy_perform(curl) //printf(" =>%s=>=>", s.ptr) sprintf(response," =>%s ", s.ptr)free(s.ptr) curl_slist_free_all(headers)} curl_easy_cleanup(curl) return res } int main(int argc, const char *argv[]) { // http 请求头, 构造 printf(" start... ") struct curl_slist *headers1 = NULL headers1 = curl_slist_append(headers1, "User-Agent: Mozilla/5.0 (Windows NT 10.0WOW64Trident/7.0rv:11.0) like Gecko")headers1 = curl_slist_append(headers1, "Content-Type:application/x-www-form-urlencodedcharset=UTF-8") char url_post0[100] = "https://www.lpfrx.com/"// 查找的字符串 : delphi char paramsLogin0[100] = "s=delphi" char resPost0[40960] = ""CURLcode res3 = curl_post_req(url_post0, paramsLogin0, headers1,resPost0) if (res3 == CURLE_OK) { printf("data: %s" ,resPost0) } printf(" end... ") return 0 } // win 下cmd下运行乱码,请先执行 chcp 65001 转成 utf8. 默认是chcp 936 // win: 运行目录下需要zlib.dll libcurl.dll // curl-Library 是我自己的目录,放在当前的程序目录下,win下的curl.h 也是需要自己去找,如果有python编程环境的话,也安装了curl库的话,应该可能会有curl.h的库路径 // win: gcc -o curlpostlpfrx curlpost_lpfrx.c -I ./curl-Library/include -L ./curl-Library/lib -lcurl //linux: gcc -o curlpostlpfrx curlpost_lpfrx.c -lcurl程序中有以下几处错误:
1)int变量的格式输入符和输出格式符都是%d,不能使用%f
2)格式输入时要使用变量的地址,而不能直接单独使用变量名。
即修改为:
scanf("%d",&a)
3)变量a与变量A是两个不同的变量,(A没有事先声明,所以这是写错了,应该改为a)
4)以字符形式输出时,应该使用格式符%c
改好以后完整的程序如下:
#include<stdio.h>
main()
{ int a
char c
scanf("%d",&a)
printf("a=%d",a)
c=a
printf("%c",c)
}
服务简介:手写体 OCR 识别,根据用户上传的图像,返回识别出的
字段信息。
计费说明:本接口按实际使用量计费,具体定价请查看 计费说明。
URL说明:支持 http 和 https 两种协议:
http://recognition.image.myqcloud.com/ocr/handwriting
https://recognition.image.myqcloud.com/ocr/handwriting
然后就是向它POST相应格式的数据就行了(用socket连接,发送HTTP request)。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
请求方式
请求头 header
参数名 必选 值 描述
host是recognition.image.myqcloud.com腾讯云文字识别服务器域名
content-length否包体总长度每个请求的包体大小限制为6MB,不支持.gif类型的动图
content-type是application/json 或 multipart/form-data根据不同接口选择:
1. 使用图片 url,选择 application/json;
2. 使用图片 image,选择 multipart/form-data。
authorization是鉴权签名多次有效签名,用于鉴权,生成方式见 鉴权签名方法
注意:
如选择 multipart/form-data,请使用 http 框架/库推荐的方式设置请求的 content-type,不推荐直接调用 setheader 等方法设置,否则可能导致 boundary 缺失引起请求失败。
请求参数
参数名称 必选 类型 说明
appid是string接入项目的唯一标识,可在 账号信息 或 云 API 密钥 中查看
image否binary图片文件,支持多个
url否Stringimage 和 url 只提供一个即可;如果都提供,只使用 url
返回内容 字段 类型 说明
codeInt返回状态值
messageString返回错误消息
data.itemsarray(item)识别出的所有字段信息
item 说明:
字段 类型 说明
itemstringstring字段字符串
itemcoordobject字段在图像中的像素坐标,包括左上角坐标 x,y,以及宽、高 width,height
wordsarray(word)字段识别出来的每个字的信息
words 说明:
字段 类型 说明
characterstring识别出的单字字符
confidencefloat识别出的单字字符对应的置信度,取值范围[0,100]
评论列表(0条)