1. android servrice里能進行網路請求嗎
可以的,只是建議發請求的時候單獨開線程。Service默認是在主線程上跑的。
對於HTTP或者HTTPS的請求,調用HttpURLConnection類或者HttpsURLConnection類就行
2. 使用socket發送http請求
#python 3.X
# requests -->urllib -->socket
#導入socket 模塊
import socket
#導入url解析的模塊
from urllib.parseimport urlparse
#通過socket發送http 請求
def get_url(url):
#解析url ,獲取host 及uri
url = urlparse(url)
#將URL解析為6個組件
# <scheme>://<netloc>/<path>;<params>?<query>#<fragment>
host =url.netloc
path =url.path
print(host,path)
#如請求資源為空,則設置為/
if path =="":
path ="/"
#建立socket 客戶端連接
client = socket.socket()
client.connect((host, 80))
#發送請求信息 \r\n win 的換行回車 可以fiddler抓包 看看http請求行的格式。
python 3.X 發送的網路包,都是位元組,所以,發送的信息,必須編碼。
client.send("GET {} HTTP/1.1\r\nHost: {} \r\nConnection:close\r\n\r\n".format( path , host ).encode("utf-8"))
#3.x 網路傳輸的數據都是位元組。必須以位元組接收。如果想列印字元串,必須解碼。
data =b""
#while 循環接收請求響應的數據。
while True:
d = client.recv(1024)#每次接收1024個位元組
if d:#如果接收數據不為空,則拼接
data += d
print(1)
else:#否則,不再接收數據則跳出循環。
break
#print(data.decode())
#把數據解碼 (包含響應頭 + 響應體【通過瀏覽器渲染顯示在網頁中的內容】)
data = data.decode()
#取出響應體
html_data = data.split("\r\n\r\n")[1]
print(html_data)
#關閉客戶端鏈接
client.close()
if __name__ =="__main__":
get_url("http://www..com")
3. GPRS模塊作用是什麼
GPRS模塊作用,主要是將串口數據經過GPRS、CDMA、3G等無線網路,將數據傳輸到上位機軟體,實現數據遠程監測。而為那通信的GPRS 模塊也叫WCTU 30XX,還可以將感測器模擬量數據採集轉換成數字量傳輸到後台軟體,實現對前端串口數據與模擬量數據分析和監控。還可以自定義I/O輸入輸出,同時支持自主AES、DES、3DES等加密方式。
4. Elasticsearch的底層模塊深入解析之http、network和transport
系統梳理一下es的一些底層mole
我們就講解http,network,transport三個mole最最常用的知識和參數
HTTP mole就是es的http api模塊
http機制是完全非同步的,也就是說線程不會因為等待響應而陷入阻塞,http非同步通信機制的優點就是解決了C10k問題
如果可能的話,盡量使用http keep alive,可以提升性能,而且可以避免客戶端發生http chunking現象
下面是一些常用的http設置
http mole,主要是用來對外提供請求介面服務的,我們不是會向es發送一個rest請求,其實就是走es的http mole的,其實就是用來處理外部的請求的
http.port,es對外暴露的http api介面的埠號,默認在9200~9300之間選擇一個,優先選擇9200,如果被綁定,則選擇9201,以此類推
我們之前用curl工具,發送http請求,那麼其實就是走es的http mole,還是http.port設置的http mole監聽的埠號
默認的話,http.port就是9200,如果9200被佔用,那麼就會用9201,以此類推,一直到9300
es默認是綁定到localhost的,這只能讓es運行在開發模式下,如果要運行在生產模式下,下面的一些network設置是必須設置的
network.host:節點綁定的hostname或者ip地址,設置之後,才能進入生產模式下
主要是對一些網路上的基礎性的東西進行一個配置
network.host,綁定的是本地的回環地址,127.0.0.1,進入的是development mode,開發模式
如果將network.host,設置為比如192.168.31.187之類的這種hostname或者ip地址之後,進入proction mode,生產模式
transport是用來進行節點間的互相通信的模塊
transport.tcp.port:用於配置節點間互相通信的埠號,默認是9300,范圍在9300~9400之間,優先綁定9300,如果被佔用,則用9301,以此類推
transport mole,es各個node之間,其實也會進行頻繁的通信,比如交換cluster state,reqeust transfer,比如插入一條document,路由之後,應該是到node3的shard2上去處理,但是請求可能發送到的是node1的shard0上,node1就要將這個document index的請求轉發給node3,讓node3上的shard2去處理這個請求
默認transport.tcp.port埠號是9300,如果被佔用,那麼就會用9301,一直到9400,以此類推
5. Express框架:內置模塊之HTTP模塊(HTTP協議部分)
網路是用於信息的傳輸與接收,共享的虛擬平台,通過它把各個點,面到網的信息都聯繫到一起,從而實現這些資源的共享
網路傳輸數據具有一定的規則,這些規則被稱為協議,HTTP就是規則中的一種,而且是使用最為頻繁的一種協議
HTTP協議是網路協議的一種,超文本傳輸協議的簡寫
超文本傳輸協議傳輸的內容就是超文本的標記語言(文字,圖片,視頻,音頻)它是TCP/IP協議之上的一個應用層協議,用於定義Web瀏覽器與Web伺服器之間的交換數據的過程以及數據本身的格式
HTTP協議是一種單純的網路傳輸協議,採用的是請求/應答的方式傳遞數據,一次請求對應一次應答(響應)
HTTP協議的約束
所謂三次握手,就是指在一個TCP連接時,需要客戶端和伺服器發送三個包,主要的目的是連接伺服器指定的埠去建立TCP連接,並同步連接雙方的序列號和確認號並交換TCP窗口大小信息
客戶端和伺服器的傳輸過程,一般是無狀態的傳輸方式,無狀態的傳輸指的是你第一次去向伺服器發送請求,伺服器並不會記住這次請求。
TCP三次握手原理
http協議規定的伺服器響應數據時的狀態編碼,就是狀態碼
1開頭的
表示普通消息
2開頭的
3開頭的
4開頭的
5開頭的
第一步:檢查瀏覽器緩存中是否緩存過該域名對應的IP地址
第二步:第二步:如果在瀏覽器緩存中沒有找到IP,那麼將繼續查找本機系統是否緩存過IP
解析過程
text/html;charset=utf-8
字元串編碼,node默認的字體編碼是utf-8,瀏覽器的編碼,默認是系統編碼,簡體中文編碼,就是GBK編碼,因此會出現亂碼現象。
值是數字,位元組的長度,一般不會設置,返回的內容就是個單純的值
可以通過這個響應頭解決跨域問題,設置為 * 號即可
HTTP中使用MIME類型代表文件的類型,伺服器具體返回各種數據的能力,但是返回數據時,應該告訴瀏覽器返回的是一個什麼類型的文件
MIME類型:文件類型的表述
6. OSI和TCP IP的功能!!
OSI是由世界INTERNET組織提出的協議標准,是TCP/IP協議的前身,要問功能就是類似TCP/IP,TCP/IP是OSI的發展後的產品,OSI七層協議的功能:
1.物理層
物理層是OSI的第一層,它雖然處於最底層,卻是整個開放系統的基礎。物理層為設備之間的數據通信提供傳輸媒體及互連設備,為數據傳輸提供可靠的環境。
媒體和互連設備物理層的媒體包括架空明線、平衡電纜、光纖、無線信道等。通信用的互連設備指DTE和DCE間的互連設備。DTE即數據終端設備,又稱物理設備,如計算機、終端等都包括在內。而DCE則是數據通信設備或電路連接設備,如數據機等。數據傳輸通常是經過DTE DCE,再經過DCE DTE的路徑。互連設備指將DTE、DCE連接起來的裝置,如各種插頭、插座。LAN中的各種粗、細同軸電纜,T形接頭、插頭,接收器,發送器,中繼器等都屬於物理層的媒體和連接器。
2.數據鏈路層
數據鏈路可以粗略地理解為數據通道。物理層要為終端設備間的數據通信提供傳輸媒體及其連接。媒體是長期的,連接是有生存期的。在連接生存期內,收發兩端可以進行不等的一次或多次數據通信。每次通信都要經過建立通信聯絡和拆除通信聯絡兩過程。這種建立起來的數據收發關系就叫做數據鏈路。而在物理媒體上傳輸的數據難免受到各種不可靠因素的影響而產生差錯,為了彌補物理層上的不足,為上層提供無差錯的數據傳輸,就要能對數據進行檢錯和糾錯。數據鏈路的建立、拆除,對數據的檢錯、糾錯是數據鏈路層的基本任務。
3.網路層
網路層的產生也是網路發展的結果。在聯機系統和線路交換的環境中,網路層的功能沒有太大意義。當數據終端增多時。它們之間有中繼設備相連。此時會出現一台終端要求不只是與惟一的一台而是能和多台終端通信的情況,這就產生了把任意兩台數據終端設備的數據鏈接起來的問題,也就是路由或尋徑。另外,當一條物理信道建立之後,被一對用戶使用,往往有許多空閑時間被浪費掉了。於是人們自然會希望讓多對用戶共用一條鏈路。為解決這一問題,就出現了邏輯信道技術和虛擬電路技術。
在具有開放特性的網路中的數據終端設備,都要配置網路層的功能。現在市場上銷售的網路硬體設備主要有網關和路由器等。
4.傳輸層
傳輸層是兩台計算機經過網路進行數據通信時,第一個端到端的層次,具有緩沖作用。當網路層服務質量不能滿足要求時,它將服務加以提高,以滿足高層的要求;當網路層服務質量較好時,它只用很少的工作。傳輸層還可進行復用,即在一個網路連接上創建多個邏輯連接。傳輸層也稱為運輸層。傳輸層只存在於端開放系統中,是介於低3層通信子網系統和高3層之間的一層,但是很重要的一層。因為它是由源端到目的端對數據傳送進行控制從低到高的最後一層。
世界上各種通信子網在性能上存在著很大差異。例如電話交換網、分組交換網、公用數據交換網。區域網等通信子網都可互連,但它們提供的吞吐量、傳輸速率、數據延遲通信費用各不相同。對於會話層來說,卻要求有一性能恆定的界面。傳輸層就承擔了這一功能。它採用分流/合流,復用/介復用技術來調節上述通信子網的差異,使會話層感受不到。
此外傳輸層還要具備差錯恢復、流量控制等功能,以此對會話層屏蔽通信子網在這些方面的細節與差異。傳輸層面對的數據對象已不是網路地址和主機地址,而是和會話層的界面埠。上述功能的最終目的是為會話提供可靠的、無誤的數據傳輸。傳輸層的服務一般要經歷傳輸連接建立階段、數據傳送階段、傳輸連接釋放階段3個階段才算完成一個完整的服務過程。
5.會話層
會話層提供的服務可使應用建立和維持會話,並能使會話獲得同步。會話層使用校驗點可使通信會話在通信失效時從校驗點繼續恢復通信。這種能力對於傳送大的文件極為重要。會話層、表示層、應用層構成開放系統的高3層,面對應用進程提供分布處理、對話管理、信息表示、恢復最後的差錯等。
6.表示層
表示層的作用之一是為異種機通信提供一種公共語言,以便能進行互操作。這種類型的服務之所以需要,是因為不同的計算機體系結構使用的數據表示法不同。在這種情況下,便需要會話層來完成這種轉換。通過前面的介紹,我們可以看出,會話層以下5層完成了端到端的數據傳送,並且是可靠、無差錯的傳送。但是數據傳送只是手段而不是目的,最終是要實現對數據的使用。由於各種系統對數據的定義並不完全相同,最易明白的例子是鍵盤,其上的某些鍵的含義在許多系統中都有差異。這自然給利用其他系統的數據造成了障礙。表示層和應用層就擔負了消除這種障礙的任務。
對於用戶數據來說,可以從兩個側面來分析,一個是數據含義被稱為語義,另一個是數據的表示形式,稱做語法。像文字、圖形、聲音、文種、壓縮和加密等都屬於語法范疇。表示層設計了3類15種功能單位,其中上下文管理功能單位就是溝通用戶間的數據編碼規則,以便雙方有一致的數據形式,能夠互相認識。
7.應用層
應用層向應用程序提供服務,這些服務按其向應用程序提供的特性分成組,並稱之為服務元素。有些可為多種應用程序共同使用,有些則為較少的一類應用程序使用。應用層是開放系統的最高層,是直接為應用進程提供服務的。其作用是在實現多個系統應用進程相互通信的同時,完成一系列業務處理所需的服務。其服務元素分為兩類:公共應用服務元素CASE和特定應用服務元素SASE。CASE提供最基本的服務,它成為應用層中任何用戶和任何服務元素的用戶,主要為應用進程通信、分布系統實現提供基本的控制機制。特定服務則要滿足一些特定服務,如文卷傳送、訪問管理、作業傳送、銀行事務、訂單輸入等。TCP/IP(Transmission Control Protocol/Internet Protocol,傳輸控制協議/網間網協議)是目前世界上應用最為廣泛的協議,它的流行與Internet的迅猛發展密切相關—TCP/IP最初是為互聯網的原型ARPANET所設計的,目的是提供一整套方便實用、能應用於多種網路上的協議,事實證明TCP/IP做到了這一點,它使網路互聯變得容易起來,並且使越來越多的網路加入其中,成為Internet的事實標准。
* 應用層—應用層是所有用戶所面向的應用程序的統稱。ICP/IP協議族在這一層面有著很多協議來支持不同的應用,許多大家所熟悉的基於Internet的應用的實現就離不開這些協議。如我們進行萬維網(WWW)訪問用到了HTTP協議、文件傳輸用FTP協議、電子郵件發送用SMTP、域名的解析用DNS協議、 遠程登錄用Telnet協議等等,都是屬於TCP/IP應用層的;就用戶而言,看到的是由一個個軟體所構築的大多為圖形化的操作界面,而實際後台運行的便是上述協議。
* 傳輸層—這一層的的功能主要是提供應用程序間的通信,TCP/IP協議族在這一層的協議有TCP和UDP。
* 網路層—是TCP/IP協議族中非常關鍵的一層,主要定義了IP地址格式,從而能夠使得不同應用類型的數據在Internet上通暢地傳輸,IP協議就是一個網路層協議。
* 網路介面層—這是TCP/IP軟體的最低層,負責接收IP數據包並通過網路發送之,或者從網路上接收物理幀,抽出IP數據報,交給IP層。
7. Meteor API HTTP
HTTP在客戶端和伺服器上提供HTTP請求API。 要使用這些函數,通過在終端中運行將HTTP包添加到您的項目中:
要使用的HTTP方法,如「GET」,「POST」或「HEAD」。
要檢索的URL。
可選的回調。 如果通過,方法非同步運行,而不是同步,並調用asyncCallback。 在客戶端,這個回調是必需的。
用作HTTP請求主體的字元串。
JSON能夠將對象串化並用作HTTP請求體。 覆蓋內容。
查詢字元串以進入URL。 覆蓋url中的任何查詢字元串。
要編碼的請求參數字典,並放置在URL(對於GET)或請求體(對於POST)中。 如果指定了內容或數據,則參數將始終放在URL中。
表單「用戶名:密碼」的HTTP基本認證字元串
字元串字典,標題添加到HTTP請求。
在失敗前等待請求的最長時間(以毫秒為單位)。 默認情況下沒有超時。
如果為true,則透明地遵循HTTP重定向。 不能在客戶端設置為false。 默認為true。
在伺服器上,HTTP.call通過使用npm請求模塊來實現。 此對象中的任何選項都將直接傳遞給請求調用。
在客戶端上,在發送請求之前調用它,以允許更直接地操作底層的XMLHttpRequest對象,該對象將作為第一個參數傳遞。 如果回調返回false,請求將不會被發送。
這個函數啟動一個到遠程伺服器的HTTP請求。
在伺服器上,這個函數可以同步運行,也可以非同步運行。 如果回調被忽略,它將同步運行,並且一旦請求成功完成,結果就會返回。 如果請求不成功,則會拋出錯誤。 從Meteor方法中進行伺服器到伺服器的HTTP API調用時,這是非常有用的,因為該方法可以基於同步HTTP調用的結果成功或失敗。 在這種情況下,考慮使用this.unblock()來允許同一連接上的其他方法同時運行。
在客戶端上,這個函數必須通過傳遞回調來非同步使用。 請注意,有些瀏覽器在發送請求之前首先發送OPTIONS請求(以確定CORS
頭)。
支持HTTP和HTTPS協議。 url參數必須是絕對URL,包括伺服器上的協議和主機名,但可能與客戶機上的當前主機相關。 查詢選項替換url的查詢字元串。 放在URL中的params中指定的參數將附加到任何查詢字元串。 例如,使用「/ path?query」的url和{foo:'bar'}的參數,最終的URL將是'/ path?query&foo = bar'。
參數被放入URL或請求體中,具體取決於請求的類型。 如果請求沒有正文,比如GET和HEAD,那麼這些參數將始終放在URL中。 對於POST或其他類型的請求,參數將被編碼到具有標準的x-www-form-urlencoded內容類型的主體中,除非內容或數據選項用於指定主體,在這種情況下參數將是 附加到URL。
當以非同步模式運行時,回調會收到兩個參數,錯誤和結果。 如果請求以任何方式失敗,包括400或500范圍內的網路錯誤,超時或HTTP狀態碼,則錯誤參數將包含錯誤。 在4xx / 5xx HTTP狀態碼的情況下,錯誤時的響應屬性與結果對象的內容相匹配。 在同步模式下運行時,從函數返回結果,或者拋出錯誤。
數字HTTP結果狀態碼,錯誤時為null。
作為字元串的HTTP響應的主體。
如果響應標頭指示JSON內容,則包含解析為JSON對象的文檔正文.
來自響應的HTTP標頭字典。
發送HTTP GET請求。等同於使用「GET」作為第一個參數來調用HTTP.call。
請求發送到的URL。
選項傳遞給HTTP.call。
請求完成時調用的回調。 客戶端需要。
8. 用什麼mole來發送http請求 python
發送請求
使用Requests發送網路請求非常簡單。
一開始要導入Requests模塊:
>>> import requests
然後,嘗試獲取某個網頁。本例子中,我們來獲取Github的公共時間線
>>> r = requests.get('')
9. vue開發中有幾種網路請求方式用哪一種
選擇什麼網路模塊?Vue中發送網路請求有非常多的方式,那麼,在開發中,如何選擇呢?
選擇一:傳統的ajax是基於XMLHTTPRequest(XHR)
為什麼不用他呢?
非常好解釋,配置和調用方式等非常混亂
編碼起來非常蛋疼
選擇二:JQuery-Ajax 相遇與傳統的ajax非常好用
為什麼不用他?
Vue項目中不適用jquery了。
專門適用ajax專門引用jquery,麻煩
選擇三: vue-resource 體積小
為什麼不用他?
不再更新。
選擇四:axios 用起來方便
功能特點:
在瀏覽器中發送xmlhttprequest請求
在node.js中發送http請求
支持promiseApi
攔截請求和響應
轉換請求和響應數據
10. 爬蟲的通用模塊
網路爬蟲(又叫網頁蜘蛛,網路機器人)就是模擬客戶端發送網路請求,接受請求響應,一種按照一定的規則,自動地抓取互聯網信息的程序
只要瀏覽器能做的事情,原則上,爬蟲都能做
1.通用爬蟲:通常指搜索引擎的的爬蟲
2.聚焦爬蟲:針對特定網站的爬蟲
robots協議:網站通過robots協議告訴搜索引擎哪些頁面可以抓取,哪些頁面不可以抓取
爬蟲要根據當前url地址對應的響應為准,當前url地址的elements的內容和url的對應不一樣
響應狀態碼:200:成功 302:臨時轉移至新的url 307:臨時轉移至新的url 404:not found 500:伺服器內部錯誤
bytes型和str型的轉換:編碼:encode()從str轉換到bytes,解碼:decode()從bytes轉換到str,編碼和解碼方式必須一致,否則會出現亂碼
先導入:import requests
1.response = requests.get('url地址') 拿到響應
2. response.content 得到bytes型數據
3. response.content.decode() 轉化成str類型
4.response.text 也能獲取網頁字元串,不過解碼方式是猜的,可能出現亂碼
所以解決requests中編解碼的方法
1.response.content.decode()
2.response.content.decode('gbk')
3.response.text
從上往下一次嘗試,即可
5.response.status_code 獲取請求狀態
可以通過assert response.status_code == 200 來判斷是否成功
6.response.request.headers 請求頭
7.response.headers 響應頭
8.response.request.url 請求的url
9.response.url 響應的url
10.發送帶headers的請求
准備headers = {}的字典,然後將字典傳入請求中,response = requests.get('url地址',headers=headers)
11.發送帶參數的請求
准備字典kw = {'name':'xiaoming'},傳入請求中response = requests.get('url地址',params=kw)
12.發送post請求
1.在登陸注冊是(post比get相對安全)
2.需要傳輸大文本內容的時候(post請求對數據長度沒有要求)
准備post_data = {},將post_data傳入請求中,response = requests.post('url地址',data=post_data,headers = headers)
13.使用代理
准備proxies={'http':'http://12.34.56.79:9527','https':'https://12.34.56.79:9527'}字典,將proxies傳入請求中,response.requests.get('url地址',proxies=proxies)
使用代理的原因:1.讓伺服器以為不是同一個客戶端在請求
2.防止我們的真實地址被泄露,防止被追究責任
14.cookie和session區別
1.cookie數據存放在客戶的瀏覽器上,session數據存放在伺服器上
2.cookie不是很安全,別人可以分析存放在本地的cookie並進行cookie欺騙
3.session會在一定時間內保存在伺服器上,當訪問增多,會比較佔用你伺服器的性能
4.單個cookie保存的數據不能超過4k,很多瀏覽器都限制一個站點最多保存20個cookie
15.爬蟲處理cookie和session
1.帶上cookie,session的好處:能夠請求到登錄之後的頁面
2.帶上cookie,session的弊端:一套cookie和session往往和一個用戶對應,請求太快,請求次數太多,容易被伺服器識別為爬蟲
3.不需要cookie的時候盡量不要去使用cookie,但為了獲取登錄後的頁面,我們必須發送帶cookie的請求
4.攜帶一堆cookie進行請求,把cookie組成cookie池
5.使用requests提供的session類,來實現客戶端和伺服器的會話保持
session = requests.session()
session.post('url地址',data=post_data,headers=headers)
response = session.get(url,headers)
6.不發送post請氣,使用cookie獲取登錄後的頁面
1.cookie過期時間很長的網站
2.在cookie過期之前能夠拿到所有的數據
3.配合其他程序一起使用,其他程序程序獲取cookie,當前程序專門請求頁面
16.獲取登錄後頁面的三種方式
1.實例化session,使用session發送post請求,在使用它獲取登錄後的頁面
2.headers中添加cookie鍵,值為cookie字元串
3.在請求方法中添加cookies參數,接受字典形式的cookie,字典形式的cookie中的鍵是cookie的name對應的值,值為cookie的value對應的值
17.尋找登錄的post地址
1.form表單中尋找action對應的url地址
post的數據是input標簽中name的值作為鍵,真正的用戶名密碼作為值得字典,post的url地址就是action對應的url地址
2.抓包,尋找登錄的url地址
勾選perserve log按鈕,防止頁面跳轉找不到url,
尋找post數據,確定參數,
參數不會變,直接用,比如密碼不是動態加密的時候,
參數會變,參數在當前的響應中,通過js生成
18.定位想要的js
1.選擇會出觸發js時間的按鈕,點擊event listener,找到js的位置
2.通過chrome中的search all file來搜索url中關鍵字
3.添加斷點的方式來查看js操作,通過python來進行同樣的操作
19.requests小技巧
1.requests.util.dict_form_cookiejar 把cookie對象轉化為字典
2.requests.util.cookiejar_form_dict把字典轉化為cookie對象
3.requests.utils.unquote('url地址') 對url地址進行解碼
4.requests.utils.quote('url地址') 對url地址進行編碼
5.請求ssl證書驗證:response = requests.get('url地址',verify=False)
6.設置超時 response = requests.get(url,timeout=10)
20 安裝retrying第三方模塊:可以讓方法執行多次後再選擇失敗