c http报文头字段内容解析小函数
2015-11-04 15:52
1546 查看
#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; }
相关文章推荐
- android网络请求框架 HttpClient与Volley的性能对比
- 黑马程序员——Java基础——网络编程1
- 写给自己的网络请求解析 返回数组和字典类型不同的处理方法
- 多媒体开发之rtcp详解---rtcp数据包
- asp.net 百度编辑器 UEditor 上传图片 图片上传配置 编辑器配置 网络连接错误,请检查配置后重试
- COGS【831】最短网络
- php curl http https
- 基于流模式的字节byte缓存区 bytebuffer.cs 用于tcp/udp的网络数据高效处理
- ASIHTTPRequest使用
- [环境搭建]-Web Api搭建到IIS服务器后PUT请求返回HTTP Error 405.0 - Method Not Allowed 解决方法 转摘:http://blog.csdn.net/qiujuer/article/details/23827531
- HTTPS其实是有两部分组成:HTTP + SSL / TLS
- HTTP请求头具体含意
- 网络工具 Netcat 之端口扫描
- DameWare Mini远程连接报错信息"找不到网络路径"处理方法。
- nc (NetCat) 网络安全工具介绍,nc在centos里的rpm包叫啥
- java使用HttpClient传输json格式的参数
- HttpClient 调用方法
- HTTP Content-type 对照表
- 计算机网络 - 运输层
- node.js搭建HTTP服务器