工作中需要对接调试http接口,之前都是写代码测试,发现直接用curl这个工具更简单高效。

举例如下:

想要post一包数据给这个接口https://XXXXXXXXX

http报文头规定如下:

POST / HTTP/1.1
Host: XXXXXXXXXX:XXXX
Accept: */*
User-Agent: Donjin Http 0.1

Content-Type: x-ISO-TPDU/x-auth

Cache-Control: no-cache

Content-Length: 93

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(hex data)

用curl测试:其中需要提交的二进制数据,为了方便,写到aaa.bin文件中了。

curl https://XXXXXXXXX -v --cacert ./UP.pem -k -H 'User-Agent: Donjin Http 0.1' -H 'Content-Type: x-ISO-TPDU/x-auth' -H 'Cache-Control: no-cache' -H 'Content-Length: 93' --data-binary @aaa.bin

相比之前,用php写了个测试demo来说,这个工具更简单高效。

之前的php demo如下:

<?phpecho "hello test 111!";
echo "<br>";
/* PHP CURL HTTPS POST */
function curl_post_https($url,$data){ // 模拟提交数据函数$curl = curl_init(); // 启动一个CURL会话curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查//curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referercurl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回$tmpInfo = curl_exec($curl); // 执行操作if (curl_errno($curl)) {echo 'Errno'.curl_error($curl);//捕抓异常}curl_close($curl); // 关闭CURL会话return $tmpInfo; // 返回数据,json格式
}
//echo getcwd();
/*** @name ssl Curl Post数据* @param string $url 接收数据的api* @param string $vars 提交的数据* @param int $second 要求程序必须在$second秒内完成,负责到$second秒后放到后台执行* @return string or boolean 成功且对方有返回值则返回*/
function curl_post_ssl($url, $data, $second=30,$aHeader=array())
{$ch = curl_init();curl_setopt($ch,CURLOPT_VERBOSE,'1');curl_setopt($ch,CURLOPT_TIMEOUT,$second);//curl_setopt($ch,CURLOPT_VERBOSE, '1'); //debug模式,方便出错调试  curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch,CURLOPT_URL,$url);curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);//curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');//curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/cert/CUP_cacert.pem');// curl_setopt($ch,CURLOPT_SSLCERTPASSWD,'');curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');curl_setopt($ch,CURLOPT_SSLKEY,getcwd().'/cert/CUP_cacert.pem');//设置header信息curl_setopt($ch, CURLOPT_HTTPHEADER, array('User-Agent: Donjin Http 0.1','Content-Type: x-ISO-TPDU/x-auth','Cache-Control: no-cache','Content-Length: ' . strlen($data)));if( count($aHeader) >= 1 ){curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);}curl_setopt($ch,CURLOPT_POST, 1);curl_setopt($ch,CURLOPT_POSTFIELDS,$data);$data = curl_exec($ch);//$curlInfo = curl_getinfo($ch);//echo $curlInfo;if (curl_errno($ch)) {echo 'Errno'.curl_error($ch);//捕抓异常}curl_close($ch);if($data)return $data;else   return false;
}/*$data = [0,1];
$aHeader =[];$rcode = curl_post_ssl($url,$data,10,$aHeader);
if($rcode)
{echo "ok"!
}
else
{echo "error"!
}
*/function hex2bin($h){if (!is_string($h)) return null;$r='';for ($a=0; $a<strlen($h); $a+=2) { $r.=chr(hexdec($h{$a}.$h{($a+1)})); }return $r;
}function Hex2String($hex){$string='';for ($i=0; $i < strlen($hex)-1; $i+=2){$string .= chr(hexdec($hex[$i].$hex[$i+1]));}return $string;
}
function hextostr($hex)
{  return preg_replace_callback('/\\\x([0-9a-fA-F]{2})/', function($matches) {  return chr(hexdec($matches[1]));  }, $hex);
}
$string = "005BXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0303135393838303231303031303231303136300011000000010030002953657175656e6365204e6f3136333135305358582d34433330343131390003303120";
$data = hex2bin($string);
#var_dump($data);  $url = 'https://XXXXXXXXXXXXXXXXX';
$aHeader = array();$rcode = curl_post_ssl($url,$data,10,$aHeader);
//$rcode = curl_post_https($url,$data);
if($rcode)
{echo "ok";echo "<br>";echo $rcode;//$myStr="";  //for($i=0;isset($rcode[$i]);$i++)  //{  //    $myStr.= chr($rcode[$i]);  //}  //var_dump($myStr);//$res=json_decode($rcode,true);echo "<br>";echo 'respond hex data:';echo "<br>";$arr1 = str_split($rcode, 1);  foreach($arr1 as $akey=>$aval){  $arr1[$akey]=" ".bin2hex($aval);echo $arr1[$akey];      }  //var_dump($arr1);  //echo hextostr($rcode); //var_dump($rcode);//echo Hex2String($rcode);//implode('!', $rcode);
}
else
{echo "error";echo "<br>";
}

使用c语言的测试如下:

/* <DESC>* Simple HTTPS GET* </DESC>*/
#include <stdio.h>
#include <pthread.h>
#include "curl/curl.h"//#define POSTFIELDS "\x00XXXXXXXXXXXXXXXX13\x12\x08\x00\x00\x20\x00\x00\x00\xc0\x00\x16\x00\x00\x01\x31\x30\x30\x30\x30\x31\x35\x39\x38\x38\x30\x32\x31\x30\x30\x31\x30\x32\x31\x30\x31\x36\x30\x00\x11\x00\x00\x00\x01\x00\x30\x00\x29\x53\x65\x71\x75\x65\x6e\x63\x65\x20\x4e\x6f\x31\x36\x33\x31\x35\x30\x53\x58\x58\x2d\x34\x43\x33\x30\x34\x31\x31\x39\x00\x03\x30\x31\x20"
//#define POSTFIELDS "005B6XXXXXXXXXXXXXXXXXXX208000020000000c0001600000131303030303135393838303231303031303231303136300011000000010030002953657175656e6365204e6f3136333135305358582d34433330343131390003303120"
//struct curl_slist *headers=NULL;unsigned char postdata[93] = {0x00,XXXXXXXXXXXXXXXXXX,0,0x00,0x20,0x00,0x00,0x00,0xc0,0x00,0x16,0x00,0x00,0x01,0x31,0x30,0x30,0x30,0x30,0x31,0x35,0x39,0x38,0x38,0x30,0x32,0x31,0x30,0x30,0x31,0x30,0x32,0x31,0x30,0x31,0x36,0x30,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x30,0x00,0x29,0x53,0x65,0x71,0x75,0x65,0x6e,0x63,0x65,0x20,0x4e,0x6f,0x31,0x36,0x33,0x31,0x35,0x30,0x53,0x58,0x58,0x2d,0x34,0x43,0x33,0x30,0x34,0x31,0x31,0x39,0x00,0x03,0x30,0x31,0x20};
//CURL *curl;typedef struct post_args{char* url;char* postdata;int postlen;
}postargs;postargs args;    pthread_t tid[10];
size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp)
{   int i = 0;//FILE *fptr = (FILE*)userp;   //fwrite(buffer, size, nmemb, fptr);   printf("rcv size:%d\n",nmemb);for(i =0;i <nmemb;i++){printf("%02x ",((unsigned char*)buffer)[i]);}printf("\nrcv ok!\n");return nmemb;
}
static void* Https_Post(void* args )
{postargs* margs;CURL *curl;CURLcode res;struct curl_slist *headers=NULL;char headerbuf[50];int ret = 0;long res_code = 0;printf("=================================>>thread tid = %u start...\n", pthread_self());margs = (postargs*)args;printf("thread begin post:\n");//curl_global_init(CURL_GLOBAL_DEFAULT);curl = curl_easy_init();if(curl) {curl_easy_setopt(curl, CURLOPT_URL, margs->url);curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);curl_easy_setopt(curl, CURLOPT_VERBOSE, 1); //curl_easy_setopt(curl, CURLOPT_TIMEOUT,8);curl_easy_setopt(curl, CURLOPT_NOSIGNAL, (long)1); curl_easy_setopt(curl, CURLOPT_POST, 1); curl_easy_setopt(curl, CURLOPT_POSTFIELDS,margs->postdata);curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, margs->postlen); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);  //curl_easy_setopt(curl, CURLOPT_WRITEDATA, fptr); //curl_easy_setopt(curl, CURLOPT_CAINFO, "/etc/UP.pem");//curl_easy_setopt(curl, CURLOPT_SSLKEYTYPE,"PEM");//curl_easy_setopt(curl, CURLOPT_SSLKEY,"UP.pem");curl_easy_setopt(curl, CURLOPT_CAINFO, "/etc/UP.pem");headers = curl_slist_append(headers, "User-Agent: Donjin Http 0.1");headers = curl_slist_append(headers, "Content-Type: x-ISO-TPDU/x-auth");headers = curl_slist_append(headers, "Cache-Control: no-cache");printf("data:%02x,%02x postlen:%d\n",margs->postdata[0],margs->postdata[1],margs->postlen);sprintf(headerbuf,"Content-Length: %d",margs->postlen);headers = curl_slist_append(headers, headerbuf);//set headerscurl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);printf("->begin send:\n");/* Perform the request, res will get the return code */ //pthread_mutex_lock(&gHTTPMutex);res = curl_easy_perform(curl);//pthread_mutex_unlock(&gHTTPMutex);  /* Check for errors */ if(res != CURLE_OK){fprintf(stderr, "curl_easy_perform() failed: %s\n",curl_easy_strerror(res));ret = 1;goto END;        }printf("->send ok\n");res = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &res_code);printf("res:%d,res_code:%ld\n",res,res_code);if(( res == CURLE_OK ) && (res_code == 200 || res_code == 201)){ret = 0;goto END;}    ret = 2;goto END;}else{printf("Init CURL failed...\n");//curl_global_cleanup();return NULL;}END://last free the header listcurl_slist_free_all(headers); /* always cleanup */ curl_easy_cleanup(curl);//curl_global_cleanup();printf("=====================================>>thread tid = %u end!\n", pthread_self());return NULL;}unsigned int Com_Dev_TxData( unsigned char *buf, unsigned int len, unsigned int timeout,unsigned int channel )
{int i = 0;int rcode = 0;args.url = "https://XXXXXXX:XXXXX";args.postdata = buf;args.postlen = len;for(i = 0;i < 1;i++ ){rcode = pthread_create(&tid[i],  NULL,Https_Post,  (void*)&args); }for(i=0; i< 1; i++) {rcode = pthread_join(tid[i], NULL);fprintf(stderr, "Thread %d terminated\n", i);}
}void* task1(void* url )
{//int i = 0;int rcode = 0;printf("task1 run...\n");rcode = Com_Dev_TxData(postdata,0x93,0,0);while(1){;}}
int main(void)
{int rcode = 0;char * url = "https://XXXXXXXX.xx";curl_global_init(CURL_GLOBAL_DEFAULT);rcode = pthread_create(&tid[9],  NULL,task1,  (void*)url); while(1){;}curl_global_cleanup();  return 0;}

########################################
#makefile
########################################
#编译主程序
BINARY  := test
OBJ_DIR := ./
#CC= gcc
#LD= ld
CFLAGS=  -g  -pthread 
LDSCRIPT=   -g  
LDFLAGS= -L ./LIBS

SRC  = $(wildcard *.c)
DIR  = $(notdir $(SRC))
OBJS = $(patsubst %.c,$(OBJ_DIR)%.o,$(DIR))

.PHONY: clean 
all:  prebuild  $(BINARY)

prebuild:
@echo Building app...

$(BINARY) : $(OBJS)
@echo Generating ...
$(CC) -o $(BINARY) $(OBJS) $(LDFLAGS) $(LDSCRIPT) 
@echo OK!

$(OBJ_DIR)%.o : %.c
$(CC) -c $(CFLAGS) $< -o  $@
clean:
rm -f $(OBJ_DIR)*.o
@echo Removed!

使用curl工具调试https接口相关推荐

  1. 关于soapUI工具调试webService接口简单示例

    首先是要配置服务的地址,在进行webservice客户端开发时,首先需要获取到服务端的webservice服务地址,根据服务地址以及通讯协议创建对应的客户端请求.如果对方提供的是一个服务地址,可以通过 ...

  2. 使用微信web开发者工具调试接口数据【开发记录】

    1.安装微信web开发者工具,注意不是开发小程序的那个 2安装好后微信扫码登录,微信上需要绑定一个公众号授权登录,在手机上打开无线局域网,链接所在区域的无线网(和电脑在同一局域网)在服务器一栏输入ip ...

  3. Postman测试工具调试接口详细教程【向后端发送Json数据并接收返回的Json结果】

    Postman测试工具调试接口详细教程 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.跳转网站:人工智能学习网站 简介 Postman,中文译为邮递员,邮差 Pos ...

  4. curl工具使用简介

    curl是利用URL语法在命令行方式下工作的开源文件传输工具.它被广泛应用在Unix.多种Linux发行版中,并且有DOS和Win32.Win64下的移植版本. 官网地址: https://curl. ...

  5. 【实用工具】magic-api接口快速开发框架

    [实用工具]magic-api接口快速开发框架 magic-api是一个基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口. 无需定义Contr ...

  6. 如何使用微信web开发者工具调试企业微信

    最近因工作需要围绕着企业微信来进行调试,从而掏出了我的微信web开发者工具,在进行授权的时候微信web开发者工具成功的提示了我:"您未绑定企业微信开发者权限".那么关键来了,因为我 ...

  7. WIndow 10 环境下使用CURL工具完成企业微信机器人的提醒功能

    企业微信机器人提醒功能实现说明 本文档主要讲解企业微信机器人的提醒功能的在window下的实现方法,主要内容包括机器人的创建,CURL工具使用环境的搭建和最终实现消息提醒功能三个主要模块.企业微信机器 ...

  8. 本地服务器访问微信接口,微信开发之如何在本地调试微信接口

    本文将带你了解微信开发如何在本地调试微信接口,希望本文对大家学微信有所帮助. 1.调试微信接口需要有自己的服务器资源 假定已经将程序部署到服务器上,并且能够正确接收微信服务器发送过来的请求 2.记日志 ...

  9. 本地调试微信接口(内网穿透到外网)

    原文链接:http://blog.csdn.net/xyang81/article/details/52141881 在做微信开发的时候,调用微信接口成功之后,微信会回调我们事先配置好的一个接口.由于 ...

最新文章

  1. CTO 写的代码,真是绝了
  2. Shell编程日常积累_20160114
  3. UVA 11626 凸包(含共线)
  4. 【计算理论】计算理论总结 ( P 、NP 、NPC 总结 ) ★★
  5. 2020-12-4((ARM汇编)mov指令,LDR指令,LDR伪指令)
  6. 100. 增减序列【差分 / 思维】
  7. 面试python开发_python开发面试问题
  8. DataList的e.Item.ItemType == ListItemType.Item判断问题
  9. 基于SegNet和UNet的遥感图像分割代码解读
  10. 如何在Ubuntu上安装GCC编译器
  11. 【报告分享】2019年中国智能门锁发展与应用白皮书.pdf
  12. ----初读《构建之法》的疑虑
  13. 当知识图谱遇上预训练语言模型
  14. 显示硬件发展与视频开发系列(4)----移动时代
  15. java实训心得_大学java实训心得总结(共9篇).docx
  16. ASP.NET Core 中文文档 第四章 MVC(3.7 )局部视图(partial)
  17. watch | 监听器、computend
  18. 用 LaTeX 写漂亮学位论文(from wloo)
  19. 新媒体管理师详解,新媒体矩阵搭建不完全指南
  20. 王者荣耀微信一区的服务器没了,王者荣耀微信区不出现保存回放 | 手游网游页游攻略大全...

热门文章

  1. 彩色打印输出文本(echo,grep,perl)
  2. php加入语音播报功能_PHP如何实现智能语音播报
  3. 操作系统实验一:Linux命令接口
  4. 计算机课程教改论文,计算机教改论文
  5. Golang的GUI探讨:不要在一棵树上吊死,要在多棵树上
  6. (二)易语言学习笔记之变量与常量
  7. 写在生日这天的碎碎念
  8. 笔记本电池应该怎样维护保养
  9. 勒索软件Locky、Tesalcrypt等使用了新的工具躲避检测
  10. 邮件网关如何过滤Locky勒索邮件