c http报文头字段内容解析小函数

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
	   
#define ABS(x) ((x)?(x):(x))

#define SET_TMP_END(tmpc,tmpp,src) {(tmpc)=*(src);(tmpp)=(src);*(src)='\0';}
#define RESTOR_TMP_END(tmpc,tmpp) {*(tmpp)=(tmpc);}

/*假设为一个HHTP报文头数据*/
char * buf="GET /service/open/nick?users=&callback=jQuery17204034407522995025_1386320955034&_=1386320955173 HTTP/1.1\r\nHost: api.csdn.net.cn\r\nConnection: keep-alive\r\nAccept: */*\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36\r\nReferer: http://bbs.csdn.net/home\r\nAccept-Encoding: gzip,deflate,sdch\r\nAccept-Language: zh-CN,zh;q=0.8\r\nCookie: 6320938.ovid\r\n\r\nHTTP/1.1 200 OK\r\nCache-Control: private\r\nContent-Length: 0";
char url[1024]={0};


char * International_Top_Level_Domain=".com.net.org.gov.edu.mil.biz.name.info.mobi.pro.travel.museum.int.aero.post.rec.asia.arts.firm.nom.store.web";

char * Country_Code_Top_Level_Domain = ".cn.tw.om.hk.ac.ad.ae.af.ag.ai.al.am.an.ao.aq.ar.as.at.au.aw.az.ba.bb.bd.be.bf.bg.bh.bi.bj.bm.bn.bo.br.bs.bt.bv.bw.by.bz.ca.cc.cf.cd.ch.ci.ck.cl.cm.co.cq.cr.cu.cv.cx.cy.cz.de.dj.dk.dm.do.dz.ec.ee.eg.eh.er.es.et.ev.fi.fj.fk.fm.fo.fr.ga.gd.ge.gf.gg.gh.gi.gl.gm.gn.gp.gr.gs.gt.gu.gw.gy.hm.hn.hr.ht.hu.id.ie.il.im.in.io.iq.ir.is.it.jm.jo.jp.je.ke.kg.kh.ki.km.kn.kp.kr.kw.ky.kz.la.lb.lc.li.lk.lr.ls.lt.lu.lv.ly.ma.mc.md.me.mg.mh.mk.ml.mm.mn.mo.mp.mq.mr.ms.mt.mu.mv.mw.mx.my.mz.na.nc.ne.nf.ng.ni.nl.no.np.nr.nt.nu.nz.qa.pa.pe.pf.pg.ph.pk.pl.pm.pn.pr.pt.pw.py.re.rs.ro.ru.rw.sa.sb.sc.sd.se.sg.sh.si.sj.sk.sl.sm.sn.so.sr.st.sv.su.sy.sz.sx.tc.td.tf.tg.th.tj.tk.tl.tm.tn.to.tr.tt.tv.tz.ua.ug.uk.um.us.uy.uz.va.vc.ve.vg.vi.vn.vu.wf.ws.ye.yt.za.zm.zw";
char* get_Second_Level_Domain(char *dest)
{
	
	char * p = NULL;
	char tmpc, *tmpp;
	
	/*过滤顶级域名*/
	p = strrchr(dest, '.');
	if(strlen(p) == 3)
	{
		/*过滤一级国际顶级域名*/
		SET_TMP_END(tmpc,tmpp,p);
		p = strrchr(dest, '.');
		RESTOR_TMP_END(tmpc,tmpp);
	}
	/*过滤二级域名*/
	
	SET_TMP_END(tmpc,tmpp,p);
	p = strrchr(dest, '.');
	RESTOR_TMP_END(tmpc,tmpp);

	return p+1;

}

int main(int argc, char** argv)
{
	char *p = buf;
	char *tbuf0 ;
	char *tbuf1;
	int tk,i;

	if(strlen(p)<15)
	{
		return 0;
	}
	url[0]='\0';
	
	/*判断每人上\r\n前边是不是http协议版本号*/
	p = memchr(p,'\r',strlen(p));
	tk = memcmp(p-8, "HTTP/1." ,7);
	if( tk != 0)
	{
		printf("skb is not http!\n");
		return 0;
	}

	p =buf;
	while(1)
	{
		tbuf0 = p;
		p = memchr(tbuf0,'\r',strlen(tbuf0));
		if(*(p+1) == '\n')
		{
			/*判断是不是报文头结束\r\n\r\n*/
			if(*(p+2) == '\r')
			{
				break;
			}
			p = p+2;

			
			tk = memcmp(p, "Host:" ,5);
			if( tk == 0)
			{	/*获取host字段内容*/
				tbuf0 = p+5;
				tbuf1= memchr(tbuf0,'\r',strlen(tbuf0));
				strncpy(url,p+5,ABS(tbuf1-tbuf0));
				
				printf("%s\n",get_Second_Level_Domain(url));
				
				break;
			}
			/*获取其他字段内容
			tk = memcmp(p, "Referer:" ,8);
			if( tk == 0)
			{	
				tbuf0 = p+8;
				tbuf1= memchr(tbuf0,'\r',strlen(tbuf0));
				strncpy(url,p+8,ABS(tbuf1-tbuf0));				
				break;
			}
		
			*/
		}
			
			
	}

	printf("url = %s\n",url);
	return 0;
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Brickie-liu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值