HTTP請(qǐng)求(轉(zhuǎn)自O(shè)neNET社區(qū))


1 回話方式:HTTP/1.0。HTTP/1.1HTTP-NG那伐。這里只用到了HTTP/1.0和HTTP/1.1宠默。另外一種不清楚嘉抓。HTTP/1.0
HTTP/1.0
1.1 建立連接->請(qǐng)求->響應(yīng)->斷開連接每次連接只處理一次請(qǐng)求和相應(yīng)始绍,對(duì)資源的每一次訪問都要建立一個(gè)單獨(dú)的連接访锻。瀏覽器到服務(wù)器的每次通訊都是完全分開的拔恰。沒有Host域因谎,所以不可以創(chuàng)建基于主機(jī)頭的虛擬主機(jī)
HTTP/1.1
1.2 在一個(gè)TCP連接中可以傳送多個(gè)HTTP請(qǐng)求和響應(yīng)不需要等待上次HTTP響應(yīng)完畢,可以多個(gè)HTTP請(qǐng)求同時(shí)進(jìn)行颜懊。服務(wù)器會(huì)根據(jù)瀏覽器發(fā)送的請(qǐng)求順序來按順序進(jìn)行響應(yīng)财岔,這被稱作管線。有Host域河爹,可以建立虛擬主機(jī)匠璧。
2. 請(qǐng)求消息
結(jié)構(gòu):
請(qǐng)求行
若干消息頭(可選)
實(shí)體內(nèi)容(可選)
GET無實(shí)體內(nèi)容
3請(qǐng)求方式:
GET:請(qǐng)求獲取Request-URI所標(biāo)識(shí)的資源
POST:在Request-URI所標(biāo)識(shí)的的資源后附加新的數(shù)據(jù)
HEAD:請(qǐng)求獲取Request-URI所標(biāo)識(shí)的資源的響應(yīng)消息報(bào)頭
PUT:請(qǐng)求服務(wù)器存儲(chǔ)一個(gè)資源,并用Request-URI作為資源標(biāo)識(shí)
DELETE:請(qǐng)求服務(wù)器刪除Request-URI所標(biāo)識(shí)的資源
TRACE:請(qǐng)求服務(wù)器回送收到的請(qǐng)求信息咸这,主要用于測(cè)試和診斷
CONNECT:保留將來使用
OPTIONS:請(qǐng)求查詢服務(wù)器的性能夷恍,或者查詢與資源相關(guān)的選項(xiàng)和需求
ps:一般物聯(lián)網(wǎng)平臺(tái)用的比較多的是post和get方法,其他方法很少見媳维。
4. 狀態(tài)行
結(jié)構(gòu):HTTP版本號(hào)_狀態(tài)碼_狀態(tài)描述(CRLF)如:HTTP/1.1 200 OK
5. 使用GET和POST傳遞參數(shù)
GET使用URL傳遞參數(shù)
如:
GET /List.aspx?Catagoryid=5&Cityid=23 HTTP/1.1
POST使用實(shí)體內(nèi)容傳遞參數(shù)
如:
POST /List.aspx HTTP/1.1
Content-Type:application/x-www-form-urlencoded
Content-Length:22
Catagoryid=5&Cityid=23
在POST消息頭中要設(shè)置Content-Type的值為application/x-www-form-urlencoded酿雪,以及使用Content-Length 以標(biāo)識(shí)實(shí)體內(nèi)容的長(zhǎng)度。
當(dāng)Content-Length長(zhǎng)度比實(shí)體內(nèi)容長(zhǎng)度短時(shí)侄刽,則會(huì)忽略多出部分的實(shí)體內(nèi)容指黎。當(dāng)Content-Length少于實(shí)體長(zhǎng)度時(shí),則會(huì)繼續(xù)等待州丹。
6 響應(yīng)狀態(tài)碼
狀態(tài)代碼由三位數(shù)字組成醋安,第一位定義了響應(yīng)的類別:
1xx:指示信息——表示請(qǐng)求已接收,繼續(xù)處理。
2xx:成功——表示請(qǐng)求已被成功接收茬故、理解盖灸、接受。
3xx:重定向——要完成請(qǐng)求必須進(jìn)行更進(jìn)一步的操作磺芭。
4xx:客戶端錯(cuò)誤——請(qǐng)求有語法錯(cuò)誤或請(qǐng)求無法實(shí)現(xiàn)赁炎。
5xx:服務(wù)器端錯(cuò)誤——服務(wù)器未能實(shí)現(xiàn)合法的請(qǐng)求。
200 OK 客戶端請(qǐng)求成功
206 客戶端發(fā)送了帶有Range頭的GET請(qǐng)求钾腺,服務(wù)器正確的返回了該范圍的數(shù)據(jù)
302/307 指出被請(qǐng)求的文檔已經(jīng)臨時(shí)移動(dòng)到別處徙垫,此文檔的新的URL在Location響應(yīng)頭中給出
304 客戶機(jī)緩存的版本是最新的,客戶機(jī)應(yīng)該繼續(xù)使用它
400 Bad Request 客戶端請(qǐng)求有語法錯(cuò)誤放棒,不能被服務(wù)器理解
401 Unauthorized 表示客戶機(jī)訪問的是一個(gè)受口令和密碼保護(hù)的頁面姻报,并且在WWW-Authenticate響應(yīng)頭提示客戶機(jī)應(yīng)重新發(fā)出一個(gè)帶有Authorization頭的請(qǐng)求信息。
403 Forbidden服務(wù)器收到請(qǐng)求间螟,但是拒絕提供服務(wù)
404 Not Found 請(qǐng)求的資源不存在
500 Internal Server Error服務(wù)器端的CGI吴旋、ASP、JSP發(fā)生錯(cuò)誤
503 Server Unavaliable服務(wù)器當(dāng)前不能處理客戶端的請(qǐng)求厢破,一段時(shí)間后可能恢復(fù)正常
ps:轉(zhuǎn)載自:http://www.cnblogs.com/YinWangLive/archive/2009/04/10/1433330.html
看到這些基本了解到用串口助手發(fā)送數(shù)據(jù)回來400/404/500 等錯(cuò)誤信息的基本含義了荣瑟。但協(xié)議本身有有些迷糊,錯(cuò)誤信息怎么找到了摩泪,最重要的方法還是看文檔笆焰,然后依據(jù)文檔的方法調(diào)試。以下是我調(diào)試好的數(shù)據(jù)包见坑,大家可以看下嚷掠。
1 數(shù)據(jù)流
1.1數(shù)據(jù)流上傳
POST /devices/680869/datapoints HTTP/1.1
api-key: bryNFvy6sbj9Isu5mHXp3fwIvtc=
Host:api.heclouds.com
Connection:close
Content-Length:59
{"datastreams":[{"id":"temp","datapoints":[{"value":50}]}]}
ps:這是默認(rèn)的數(shù)據(jù)流上傳方式。如果想要長(zhǎng)連接Connection:close 這句要?jiǎng)h除荞驴,HTTP/1.1這里要寫不皆。如果寫HTTP/1.0就是發(fā)送一次數(shù)據(jù)然后網(wǎng)站就斷開連接了。
如果想要簡(jiǎn)化數(shù)據(jù)包熊楼,需要在頭文件修改數(shù)據(jù)包傳輸協(xié)議粟焊。我這里選擇方式3 。POST /devices/680869/datapoints?type=3 HTTP/1.1
1.2發(fā)送一個(gè)設(shè)備上的N個(gè)數(shù)據(jù)流
POST /devices/680869/datapoints?type=3 HTTP/1.1
api-key: bryNFvy6sbj9Isu5mHXp3fwIvtc=
Host:api.heclouds.com
Connection:close
Content-Length:23
{"shidu":22,"wendu":22}
ps: Content-Length:23 后的換行符號(hào)一定要孙蒙。{"shidu":22,"wendu":22} 后的換行符可以不要项棠,但盡量使用換行符,這是個(gè)習(xí)慣問題挎峦。23是指數(shù)據(jù)包{"shidu":22,"wendu":22}的字符數(shù)字香追,漢字也遵循相似的規(guī)則,字符的長(zhǎng)度不包括前后的換行符坦胶,數(shù)字的大小謹(jǐn)慎使用透典。比如改為22會(huì)出現(xiàn)如下效果
12:32:52 收到數(shù)據(jù):HTTP/1.1 200 OK
Date: Wed, 04 May 2016 04:32:34 GMT
Content-Type: application/json
Content-Length: 34
Connection: close
Server: Apache-Coyote/1.1
Pragma: no-cache
{"errno":4,"error":"invalid JSON"}
數(shù)據(jù)長(zhǎng)度改為24,25沒有問題晴楔,但改為26,服務(wù)器就沒有反應(yīng)了峭咒。個(gè)人猜測(cè)網(wǎng)站設(shè)計(jì)時(shí)税弃,一段HTTP協(xié)議發(fā)送完成后允許換行和不換行共存,23-25長(zhǎng)度下數(shù)據(jù)均可正常上傳凑队,這是網(wǎng)站設(shè)計(jì)時(shí)考慮的一些使用者習(xí)慣問題则果。
1.3發(fā)送一個(gè)設(shè)備上的N個(gè)數(shù)據(jù)流例2
當(dāng)然一次上傳可以上傳某項(xiàng)目中的一個(gè)設(shè)備的N個(gè)數(shù)據(jù)流′霭保跨項(xiàng)目這是不行的西壮,因?yàn)锳PIKEY不一致〗芯跨設(shè)備好像不行款青,沒有仔細(xì)研究。下面介紹我的上傳開關(guān)信息http協(xié)議
POST /devices/680872/datapoints?type=3 HTTP/1.1 api-key: vUAoLurFOH=xkqr9s7w4dXuXBGY=
Host:api.heclouds.com
Connection:close
Content-Length:42
{"taideng":0,"diandengl":0,"diandeng2":1}
返回的數(shù)據(jù)如下:
12:45:46 收到數(shù)據(jù):HTTP/1.1 200 OK
Date: Wed, 04 May 2016 04:45:28 GMTContent-Type: application/json
Content-Length: 26
Connection: close
Server: Apache-Coyote/1.1
Pragma: no-cache
{"errno":0,"error":"succ"}
2 除了上傳數(shù)據(jù)之外霍狰,還需要獲取數(shù)據(jù)抡草,比如改變了開關(guān)值,設(shè)備需要主動(dòng)獲取開關(guān)值蔗坯,設(shè)備才可以達(dá)到遠(yuǎn)程控制的目的康震。
2.1獲取設(shè)備多個(gè)數(shù)據(jù)流
GET /devices/680872/datastreams HTTP/1.1
api-key: vUAoLurFOH=xkqr9s7w4dXuXBGY=
Host:api.heclouds.com
Connection:close
返回的數(shù)據(jù)如下:
{"errno":0,"data":[{"create_time":"2016-01-14 09:34:17","update_at":"2016-05-04 12:45:28","id":"taideng","uuid":"f498ffdb-b639-5596-9081-90072c4396d3","current_value":0},{"create_time":"2016-01-13 20:01:27","update_at":"2016-05-02 22:40:09","id":"diandeng1","uuid":"0486063b-0e01-5e1b-a21d-bd9a90347d43","current_value":0},{"create_time":"2016-01-14 09:34:24","update_at":"2016-05-04 12:45:28","id":"diandeng2","uuid":"a551ca79-4fb4-542c-84a0-3537ecf84875","current_value":1},{"create_time":"2016-05-04 10:09:22","update_at":"2016-05-04 12:45:28","id":"diandengl","uuid":"5e0ba4db-e85e-4d8e-b706-4e04e88bf8bb","current_value":0}],"error":"succ"}
ps:Connection:close 后面要加兩個(gè)換行符,否則服務(wù)器沒有響應(yīng)的步悠。
2.2 讀取設(shè)備單個(gè)數(shù)據(jù)流
GET /devices/680872/datastreams/taideng HTTP/1.1
api-key: vUAoLurFOH=xkqr9s7w4dXuXBGY=
Host:api.heclouds.com
Connection:close
返回?cái)?shù)據(jù)
Date: Wed, 04 May 2016 04:54:26 GMT
Content-Type: application/json
Content-Length: 138
Connection: close
Server: Apache-Coyote/1.1
Pragma: no-cache
{"errno":0,"data":{"create_time":"2016-01-14 09:34:17","update_at":"2016-05-04 12:45:28","id":"taideng","current_value":0},"error":"succ"}
3 設(shè)備
這里我覺得設(shè)備和數(shù)據(jù)流沒有什么區(qū)別签杈,只是方便app,微信開發(fā)的瘫镇,省去網(wǎng)站注冊(cè)麻煩鼎兽。這里就略過。但還是要寫下我的筆記铣除。
3.1讀取多個(gè)設(shè)備
GET /devices HTTP/1.1
api-key: vUAoLurFOH=xkqr9s7w4dXuXBGY=
Host:api.heclouds.com
Connection:close
返回?cái)?shù)據(jù):
{"errno":0,"data":{"per_page":30,"devices":[{"private":false,"protocol":"HTTP","create_time":"2016-01-15 08:20:35","location":{"lon":114.39322112330001,"lat":30.508559475486003},"id":"680997","auth_info":{"SYS":"WYfjhCGqU2ks4ltBQe02kkWTYxE="},"title":"鐢電伅鎺у埗2","desc":"瀹ゅ鐢電伅鎺у埗","tags":["瀹ゅ鐢電伅鎺у埗"]},{"private":false,"protocol":"HTTP","create_time":"2016-01-13 19:59:02","location":{"lon":114.45659857426999,"lat":30.470787904259},"auth_info":{"SYS":"Sonv4XxoF68E82739gfef1NTu3g="},"id":"680872","title":"鐢電伅","desc":"鐢電伅","tags":["鐢電伅鐘舵€?]}],"total_count":2,"page":1},"error":"succ"}
3.2讀取單個(gè)設(shè)備具體信息
Date: Wed, 04 May 2016 05:01:05 GMT
Content-Type: application/json
Content-Length: 140
Connection: close
Server: Apache-Coyote/1.1
Pragma: no-cache
{"errno":0,"data":[{"create_time":"2016-01-14 09:34:17","update_at":"2016-05-04 12:45:28","id":"taideng","current_value":0}],"error":"succ"}
3.3讀取觸發(fā)器 溫度高觸發(fā)器
GET /triggers/11608 HTTP/1.1
api-key: bryNFvy6sbj9Isu5mHXp3fwIvtc=
Host:api.heclouds.com
Connection:close
返回?cái)?shù)據(jù):
Date: Wed, 04 May 2016 05:02:41 GMT
Content-Type: application/json
Content-Length: 191
Connection: close
Server: Apache-Coyote/1.1
Pragma: no-cache
{"errno":0,"data":{"invalid":true,"dev_ids":["680869"],"threshold":20,"id":11608,"title":"hightemp","type":">=","ds_id":"wendu","url":"http://api.heclouds.com/devices/680869"},"error":"succ"}
3.4讀觸發(fā)器谚咬。電燈1觸發(fā)器
GET /triggers/11610 HTTP/1.1
api-key: vUAoLurFOH=xkqr9s7w4dXuXBGY=
Host:api.heclouds.com
Connection:close
返回?cái)?shù)據(jù):
Date: Wed, 04 May 2016 05:04:17 GMT
Content-Type: application/json
Content-Length: 171
Connection: close
Server: Apache-Coyote/1.1
Pragma: no-cache
{"errno":0,"data":{"dev_ids":["680872"],"id":11610,"title":"寮€鐢電伅1","type":"change","ds_id":"diandeng1","url":"http://api.heclouds.com/devices/680872"},"error":"succ"}
3.5獲取數(shù)據(jù)點(diǎn)
GET /devices/680869/datapoints HTTP/1.1
api-key: bryNFvy6sbj9Isu5mHXp3fwIvtc=
Host:api.heclouds.com
Connection:close
返回?cái)?shù)據(jù)
Date: Wed, 04 May 2016 05:04:17 GMT
Content-Type: application/json
Content-Length: 209
Connection: close
Server: Apache-Coyote/1.1
Pragma: no-cache
{"errno":0,"data":{"count":2,"datastreams":[{"datapoints":[{"at":"2016-05-04 13:05:05.701","value":19}],"id":"shidu"},{"datapoints":[{"at":"2016-05-04 13:05:05.704","value":30}],"id":"wendu"}]},"error":"succ"}
4二進(jìn)制
4.1上傳二進(jìn)制
POST /bindata?device_id=1078739&datastream_id=ir HTTP/1.1
api-key: bryNFvy6sbj9Isu5mHXp3fwIvtc=
Host:api.heclouds.com
Content-Length:1
0
13:08:05 收到數(shù)據(jù):HTTP/1.1 200 OK
Date: Wed, 04 May 2016 05:07:47 GMT
Content-Type: application/json
Content-Length: 70
Connection: keep-alive
Server: Apache-Coyote/1.1
Pragma: no-cache
{"errno":0,"data":{"index":"1078739_1462338467786_ir"},"error":"succ"}
ps:收到的數(shù)據(jù)中我可能忘了把一些附加信息粘貼上去,但這不影響效果尚粘。
5歷史數(shù)據(jù)
讀取歷史數(shù)據(jù):
GET /datapoints?start=2015-12-02T14:01:46&device_id=978118&limit=6000 HTTP/1.1
api-key: bryNFvy6sbj9Isu5mHXp3fwIvtc=
Host:api.heclouds.com
Connection:close
返回?cái)?shù)據(jù):
{"errno":0,"data":{"datapoints":[{"at":"2016-03-28 09:41:52.278","ds_id":"temp2","value":22,"dev_id":"978118"},{"at":"2016-04-19 19:58:56.147","ds_id":"temp2","value":22,"dev_id":"978118"},{"at":"2016-05-04 10:40:42.551","ds_id":"temp2","value":22,"dev_id":"978118"},{"at":"2016-03-28 09:41:52.281","ds_id":"temp1","value":22,"dev_id":"978118"},{"at":"2016-04-19 19:58:56.150","ds_id":"temp1","value":22,"dev_id":"978118"},{"at":"2016-05-04 10:40:42.558","ds_id":"temp1","value":22,"dev_id":"978118"}],"count":6},"error":"succ"}
其他的我就不多說了择卦,大家看文檔就懂了。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末郎嫁,一起剝皮案震驚了整個(gè)濱河市秉继,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌泽铛,老刑警劉巖尚辑,帶你破解...
    沈念sama閱讀 222,807評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異盔腔,居然都是意外死亡杠茬,警方通過查閱死者的電腦和手機(jī)月褥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瓢喉,“玉大人宁赤,你說我怎么就攤上這事∷ㄆ保” “怎么了决左?”我有些...
    開封第一講書人閱讀 169,589評(píng)論 0 363
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)逗载。 經(jīng)常有香客問我哆窿,道長(zhǎng),這世上最難降的妖魔是什么厉斟? 我笑而不...
    開封第一講書人閱讀 60,188評(píng)論 1 300
  • 正文 為了忘掉前任挚躯,我火速辦了婚禮,結(jié)果婚禮上擦秽,老公的妹妹穿的比我還像新娘码荔。我一直安慰自己,他們只是感情好感挥,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評(píng)論 6 398
  • 文/花漫 我一把揭開白布缩搅。 她就那樣靜靜地躺著,像睡著了一般触幼。 火紅的嫁衣襯著肌膚如雪硼瓣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,785評(píng)論 1 314
  • 那天置谦,我揣著相機(jī)與錄音堂鲤,去河邊找鬼。 笑死媒峡,一個(gè)胖子當(dāng)著我的面吹牛瘟栖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谅阿,決...
    沈念sama閱讀 41,220評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼半哟,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了签餐?” 一聲冷哼從身側(cè)響起寓涨,我...
    開封第一講書人閱讀 40,167評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎氯檐,沒想到半個(gè)月后戒良,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,698評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡男摧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評(píng)論 3 343
  • 正文 我和宋清朗相戀三年蔬墩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了译打。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,912評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拇颅,死狀恐怖奏司,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情樟插,我是刑警寧澤韵洋,帶...
    沈念sama閱讀 36,572評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站黄锤,受9級(jí)特大地震影響搪缨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鸵熟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評(píng)論 3 336
  • 文/蒙蒙 一副编、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧流强,春花似錦痹届、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至奏篙,卻和暖如春柴淘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秘通。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評(píng)論 1 274
  • 我被黑心中介騙來泰國打工为严, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人充易。 一個(gè)月前我還...
    沈念sama閱讀 49,359評(píng)論 3 379
  • 正文 我出身青樓梗脾,卻偏偏與公主長(zhǎng)得像荸型,于是被迫代替她去往敵國和親盹靴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容