无发起端时,关于http报文的组建

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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值