http报文分为http报文头和报文体,报文体还好,但报文头由于有固定的格式,每一行结束后要加回车换行,整个报文头结束后要回车换行回车换行,组起来比较麻烦,现在就报文头用一个简单的小程序生成!
/* writepkg.c */
/*******************************************************************************
*** 版本号: 2.0
*** 程序作者: zoupei
*** 生成日期: 2012-06-07
*** 所属模块: 公共模块
*** 程序名称: pub_log.c
*** 程序作用: 打印日志、获取当前的日期时间
*** 修改记录:
*** 修改时间:
*** 修改作者:
*** 修改内容:
******************************************************************************/
#ifndef _MYLOG_H_
#define _MYLOG_H_
#include <unistd.h>
#include<stdarg.h>
#include<errno.h>
#include<stdio.h>
#include<time.h>
int wr_log(char *psFormat,...); /*打印日志*/
#endif
/******************************************************************************
*** 函数名称: wr_log
*** 函数功能:打印日志
*** 函数作者: zoupei
*** 生成日期: 2012-06-07
*** 调用函数:
*** 函数1: get_time 获取当前的日期时间
*** 访问的表:
*** 修改的表:
*** 输入参数:
*** 参数1: psFormat 打印格式
*** 输出参数:
*** 参数1: 无
*** 注意事项:
******************************************************************************/
int wr_log(char *psFormat, ...)
{
if (psFormat == NULL)
{
wr_log("[%s][%d] 输入参数错误! psFormat = [%x]\n",
__FILE__, __LINE__, psFormat);
return -1;
}
char sBuff[2*1024];
char sFileName[512];
va_list ap;
FILE *fPtr;
fPtr = NULL;
memset(sFileName, 0x0, sizeof(sFileName));
memset(sBuff, 0x0, sizeof(sBuff));
va_start(ap, psFormat);
vsnprintf(sBuff, sizeof(sBuff), psFormat, ap);
va_end(ap);
sprintf(sFileName,"%s/bak/http",getenv("SWWORK"));
fPtr = fopen(sFileName, "a+");
if (fPtr == NULL)
{
wr_log(sBuff, "[%s]文件打开失败!", errno, strerror(errno));
return -1;
}
strcat(sBuff, "\n");
fputs(sBuff, fPtr);
fclose(fPtr);
return 0;
}
int main()
{
char sBuf[2*1024];
char *psTmp = NULL;
FILE *fp = NULL;
int iLen = -1;
int len = -1;
memset(sBuf, 0x00, sizeof(sBuf));
strncpy(sBuf, "POST http://192.168.2.3:9922 HTTP/1.1\r\n", sizeof(sBuf)-1);
strcat(sBuf, "Content-Type: text/xml;charset=utf-8\r\n");
strcat(sBuf, "Content-Length: 1352\r\n");
strcat(sBuf, "Host: 192.168.2.3,9922\r\n");
strcat(sBuf, "Connection: Keep-Alive\r\n\r\n");
fp = fopen("/home/cspt/esw/test/makemsg/prehttp", "r");
if (fp == NULL)
{
printf("error!\n");
}
fseek(fp, 0L, SEEK_END);
iLen = ftell(fp);
printf("iLen[%d]\n",iLen);
psTmp = (char *)malloc(sizeof(char)*iLen);
memset(psTmp, 0x0, iLen);
fseek(fp, 0L, SEEK_SET);
len = fread(psTmp, iLen, 1, fp);
printf("len[%d]\n",len);
psTmp[iLen] = '\0';
printf("psTmp[%s]\n",psTmp);
strcat(sBuf, psTmp);
free(psTmp);
psTmp = NULL;
fclose(fp);
wr_log("%s",sBuf);
return 0;
}
prehttp 注释:下面是报文体部分,放在prehttp文件中
<Cartoon>
<Message id="029b56faf6b41f636abddd992bee16d3">
<CSVReq id="CSVReq">
<version>3.0.0</version>
<date>20120817 10:29:00</date>
<instId>ALIPAY</instId>
<certId>ALIPAY2012081600</certId>
<accountName>zoupei</accountName>
<bankCardNo>6212390000000006612</bankCardNo>
<bankCardType>D</bankCardType>
<certificateType>1</certificateType>
<certificateNo>131102198101204622</certificateNo>
<mobilePhone>13112345678</mobilePhone>
</CSVReq>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"></CanonicalizationMethod>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"></SignatureMethod>
<Reference URI="#CSVReq">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"></Transform>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></DigestMethod>
<DigestValue>BFnQY/MPzu0fGupYzQ25QaukkyU=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>rM3TyhtuGwnf2mgMoGbjtqRDfeOCkZGMw6XQ9dHvq1COCrmtirvBCqY2VCEKywR7l9szcnObIVlL6VKw2qL57PU/CNcqI8BemJxBT9NAkvOTQk/ry18SBPieYeDF7F4Xtt1vRhS69lPU+MEgAbezCzaiLTYp458tlQhPWB5MRkE=</SignatureValue>
</Signature>
</Message>
</Cartoon>