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; }
相關推薦
c http報文頭欄位內容解析小函式
#include <stdio.h> #include <stdlib.h> #include <string.h> #define ABS(x) ((x)?(x):(x)) #define SET_TMP_END(tmpc,
vue中的axios.post使用json資料傳輸,出現請求頭欄位內容型別是不被允許的情況的解決方案
問題描述: 由於restful介面需要在頭部header傳遞兩個欄位: Content-Type: application/json Access-Token: 84c6635800b14e0eba4f7ece65e095a1 但是,在vue.js裡面配置: 執行傳送的時候出現: 意思是
自制工具:CSV程式碼生成器:自動生成CSV檔案對應的C++實體類和欄位型別解析程式碼
更有開發效率地使用CSV檔案 為了更有效率地使用CSV檔案,我製作了一個工具:Code程式碼生成器。 這個工具可以對CSV檔案進行簡單地配置,自動生成這個CSV檔案對應的C++資料結構和欄位型別解析函式程式碼。 工程專案只要加入這些自動生成的程式碼,就可以更方便地使
HTTP首部欄位完全解析
http協議是前端開發人員最常接觸到的網路協議。在開發過程中,尤其是除錯過程中避免不了需要去分析http請求的詳細資訊。在這其中頭部欄位提供的資訊最多,比如通過響應狀態碼我們可以直觀的看到響應的大致狀態。那麼你是否清楚http首部欄位都有哪些,具體含義是什麼,可選值又有哪些呢?看完下面的內容,我相信對於這幾個
C#.net讀取Excel表中的資料時,有些欄位內容(字串、數字)讀取不到的解決辦法
匯入Excel時,會丟失一些手機號,或者固定電話號 問題出在於,他們將資料填入Excel時,有些格式是數值型別,有些是文字型別 當用OLEDB讀取Excel的時候,在Extended Properties中若沒有配置IMEX=1的屬性,微軟的處理機制是將列轉換為同一
HTTP報文頭內容
文章參考:https://blog.csdn.net/shouwang666666/article/details/70232053/點選開啟連結https://blog.csdn.net/ythunder/article/details/65664309點選開啟連結
JavaWeb中對HTTP報文頭的解析
寫在前面:該文只是開發中的測試DEMO,後期有時間了會繼續總結完善。 package com.keyisoftware.test; import java.io.IOException; import java.io.PrintWriter; import java.ut
HTTP協議Keep-Alive模式詳解和HTTP頭欄位總結
1、什麼是Keep-Alive模式? 我們知道HTTP協議採用“請求-應答”模式,當使用普通模式,即非KeepAlive模式時,每個請求/應答客戶和伺服器都要新建一個連線,完成 之後立即斷開連線(HTTP協議為無連線的協議);當使用Keep-Alive模式(又稱持久連線
MIME協議(四) -- MIME訊息的頭欄位
MIME訊息的頭欄位 4.1 Content-Type 對於表示某個具體資源的MIME訊息,它的訊息頭中需要指定資源的資料型別;對於MIME組合訊息,它的訊息頭中需要指定組合關係。具體資源的資料型別和組合訊息的組合關係,都是通過訊息頭中的Content-Type頭欄位來指定的。Content-
c# 中屬性與欄位
今天回頭學習c# 的基礎,看到屬性的定義,忽然明白一個簡單的道理:欄位定義為Private,不需要class 的外部進行訪問,那麼就可以搞個屬性對private 的欄位進行get,set, 還有一個理由就是這個private 的欄位有時是隻讀取的,不允許外部賦值寫入,那麼就只搞個get 的屬性OK了
django淺談 過濾欄位內容
views.py class ConsultRecordModelForm(forms.ModelForm): class Meta: model = ConsultRecord # fields = "__all__" exclude=['delet
C#查詢ACCESS資料庫欄位和時間欄位
查詢表的所有欄位 string.Format("SELECT * FROM{0}", TableName); 查詢表中的一個欄位 在ACCESS中將欄位用CStr()轉換成字串來判斷 string.Format("SELECT* FROM {0} WHERE CStr({1})=
Android 寫民族選擇框時的民族欄位內容
第一種 在java類裡寫的String 陣列: String[] nations = {"漢族", "蒙古族", "回族", "藏族", "維吾爾族", "苗族", "彝族", "壯族", "布依族", "朝鮮族", "滿族", "侗族", "瑤族", "白族", "土家族",
Nginx自定義請求頭欄位
介紹在nginx中自定義請求頭欄位,並在日誌中展示相關欄位的值: 第一種方法: 1 在代理nginx伺服器配置中增加兩個proxy_set_header欄位,一個iden,一個age,分別賦值為"student","21",我們將來在日誌中看到這兩個常量; server {
sql,欄位內容用逗號分割的字串轉換成多條資料
WITH testtb2 AS ( SELECT A.[TypeClass_ID], A.[temp], CHARINDEX(',', A.[temp]) AS STA, CHARINDEX(','
淺析HTTP首部欄位
HTTP首部欄位是構成HTTP報文的重要組成部分,在客戶端和伺服器之間以HTTP協議進行通訊的過程中,無論是請求還是響應,它都能夠起到傳遞額外關鍵資訊的作用。 使用首部欄位是為了給瀏覽器和伺服器提供諸如報文大小、使用的語言、接收的字符集、認證資訊等內容。
MySql 新增欄位內容由原欄位提供
今天遇到一個問題,mysql庫表中資料儲存量比較大,導致對於時間的查詢比較慢。資料量100W左右,時間是字串格式,形式是 "yyyy-MM-dd HH:mm:ss"。需要對庫表結構進行改造,改造內容就是在原有庫表基礎上新增一個時間相關的欄位,而內容由原欄位提供。 在網上也查
RFC2616-HTTP1.1-Header Field Definitions(頭欄位規定部分—譯文)
RFC 2616 Fielding, et al. 14 頭欄位規定 該章節定義了HTTP1.1標準所包含的所有頭欄位的相關語法和含義。實體頭欄位是接收者或者傳送者所涉及到的,並不區分是客戶端還是伺服器所擁有,而是依據是誰傳送或者是誰接受該實體的欄位。 14.1 Accept Accept請求頭欄位
mysql查詢語句中對欄位內容補位(補零為例)length()函式獲取某個欄位資料長度
mysql查詢語句中對欄位內容補位(補零為例)length()函式獲取某個欄位資料長度 jakehu 2014 年 4 月 10 日 mysql查詢語句中對欄位內容補位(補零為例)length()函式獲取某個欄位資料長度2014-04-
C#中的屬性,欄位,變數
2018年11月11日 21:57:20 qq_29975021 閱讀數:3 標籤: C#