libghttp安装及使用封装案例(httpClient)
来源:互联网 发布:软件中举报是什么意思 编辑:程序博客网 时间:2024/06/05 12:08
libghttp库下载地址:http://lfs.linuxsir.org/htdocs/blfscvs/gnome/libghttp.html
官方API参考文档:https://sourcecodebrowser.com/libghttp/1.0.9/ghttp_8h.html
将源码包下载下来,进入例行安装流程:
先解压:
tar -xzvf libghttp-1.0.9.tar.gzcd libghttp-1.0.9
安装:
./configuremakemake install
在安装的过程中可能会遇到一些问题:
checking host system type... Invalid configuration `x86_64-unknown-linux-gnu': machine `x86_64-unknown' not recognizedchecking build system type... Invalid configuration `x86_64-unknown-linux-gnu': machine `x86_64-unknown' not recognizedchecking for ranlib... ranlibchecking for ld used by GCC... /usr/bin/ldchecking if the linker (/usr/bin/ld) is GNU ld... yeschecking for BSD-compatible nm... /usr/bin/nm -Bchecking whether ln -s works... yesupdating cache ./config.cacheltconfig: you must specify a host type if you use `--no-verify'Try `ltconfig --help' for more information.configure: error: libtool configure failed
解决这个问题其实很简单:
# 首先查找一下config.guess和config.sub文件的目录find / -name config.guessfind / -name config.sub# 将查找出来的文件随便选择一个覆盖到软件目录cp /usr/share/automake-1.11/config.guess .cp /usr/share/automake-1.11/config.sub .如果找不到则:sudo apt-get install automake
下面是我自己封装的一个http客户端,拥有post和get方法:
头文件httpClient.h
/*========================================================= *文件名称: httpClient.h *创建日期: 2017-7-6 *创建者 : 冷月莫负 *修改记录: * 2017-7-6 created===========================================================*/#ifndef HTTPCLIENT_H #define HTTPCLIENT_H #include <map>#include <string>using namespace std;int Get(string url, string params, int timeout, string&result,map<string,string>&m) ; int Post(string uri, string params, int timeout, string&result, map<string,string>&m) ; #endif
cpp实现文件httpClient.cpp
#include "ghttp.h" #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h>#include "httpClient.h"#include "ulaneLog.h"int Get(string url, string params, int timeout, string& result,map<string,string>&m) { ghttp_status status; char* temresult = NULL; ghttp_request *request = NULL; request = ghttp_request_new(); char szUrl[256]; memset(szUrl,0x00,sizeof(szUrl)); strcpy(szUrl,url.c_str()); if (ghttp_set_uri(request, szUrl) == -1) { ghttp_clean(request); return -1; } if (ghttp_set_type(request, ghttp_type_get) == -1) { ghttp_clean(request); return -1; } map<string,string>::iterator it = m.begin(); for(it;it!=m.end();it++) { ghttp_set_header(request, it->first.c_str(),it->second.c_str()); } char timeout_str[10]; sprintf(timeout_str, "%d", timeout); ghttp_set_header(request, http_hdr_Timeout, timeout_str); ghttp_set_sync(request, ghttp_sync); ghttp_prepare(request); status=ghttp_process(request); if (status == ghttp_error) { ghttp_request_destroy(request); return -1; } temresult = ghttp_get_body(request); result += temresult; ghttp_request_destroy(request); return 0; } int Post(string uri, string params, int timeout, string& result, map<string,string>&m) { char* temresult = NULL; ghttp_request *request = NULL; ghttp_status status; int len; char szUri[256]; memset(szUri,0x00,sizeof(szUri)); strcpy(szUri,uri.c_str()); request = ghttp_request_new(); if (ghttp_set_uri(request, szUri) == -1) { ghttp_clean(request); return -1; } if (ghttp_set_type(request, ghttp_type_post) == -1) { ghttp_clean(request); return -1; } map<string,string>::iterator it = m.begin(); for(it;it!=m.end();it++) { ghttp_set_header(request, it->first.c_str(),it->second.c_str()); } ghttp_set_sync(request, ghttp_sync); char timeout_str[10]; sprintf(timeout_str, "%d", timeout); ghttp_set_header(request, "Content-Type", "application/json"); ghttp_set_header(request, http_hdr_Timeout, timeout_str); char szParams[8192]; memset(szParams,0x00,sizeof(szParams)); strcpy(szParams,params.c_str()); len = strlen(szParams); ghttp_set_body(request, szParams, len); // ghttp_prepare(request); status = ghttp_process(request); if (status == ghttp_error) { return -1; } result = ghttp_get_body(request); //test temresult = ghttp_get_body(request); result += temresult; ghttp_request_destroy(request); return 0; }
post和get方法中最后一个参数是一个map<string,string>类型的map容器,使用的时候只需要将你要设置的header都已key:value的形式存到容器中,就都会被设置。
参考文章:
http://blog.csdn.net/earbao/article/details/39007549
http://www.phpjiayuan.com/109/270.html
阅读全文
0 0
- libghttp安装及使用封装案例(httpClient)
- libghttp 编译及封装使用实例
- libghttp 封装使用实例
- HttpClient简单封装及使用
- 使用CURL封装HttpClient
- libghttp
- HttpClient介绍及入门案例
- HttpClient的使用和封装
- keepalived的安装及使用案例
- HttpClient使用及注意事项
- Httpclient介绍及使用
- Cocos2d-x3.1 HttpClient封装与使用
- HttpClient封装
- HttpUrlConnection与HttpClient的认识(四) -HttpClient的封装
- HttpUrlConnection与HttpClient的认识(四) -HttpClient的封装
- Java:封装案例(上)
- Java:封装案例(下)
- Java:封装案例(续)
- LeetCode 83. Remove Duplicates from Sorted List
- uikit——Auto Layout——constraint
- C/C++ | 20-6递归算法判断数组a[N]是否为一个递增数组
- POJ 3141 Distant Galaxy 笔记
- 服务端开发所需技能归纳
- libghttp安装及使用封装案例(httpClient)
- Qt重写事件,画图事件,拖拽事件,进入离开事件等
- 个人笔记
- JS-10-原型链
- 布局的基本属性和表格布局
- springmvc执行流程(二)
- 路径中 斜杠/和反斜杠\ 的区别
- Android Wi-Fi WifiStateMachine解析
- 51 nod 1004