Python之request和socket介紹
一、requests庫基本使用
請求方式:
get,post,head,put,delete,options。
**kwargs訪問控制引數:
- params:字典或位元組序列,作為引數加到URL中
- data:字典、位元組序列或檔案物件,作為request的內容
- json:json格式的資料,作為request的內容
- headers:字典,http定製頭
- cookies:字典或cookiejar
- files:字典型別,傳輸檔案
- timeout:設定超時時間,秒為單位、
- proxies:字典型別,設定訪問代理伺服器,可以增加登陸認證
- allow_redirects:true/false,預設true,重定向開關
- stream:true/false,預設true,獲取內容立即下載開關
- verify:true/false,預設true,認證SSL證書開關
- cert:本地SSL證書
- auth:元組,支援http認證功能
使用requests方法後,會返回一個response物件。
response物件的屬性:
r.status_code:http請求的返回狀態
r.text:http響應內容的字串形式
r.encoding:從http header中猜測的響應內容編碼方式
r.apparent_encodign:從內容中分析出的響應內容編碼格式
r.content:http響應內容的二進位制形式
requests庫的異常:
requests.ConnectionError:網路連線錯誤異常,如DNS查詢失敗、拒絕連線等
requests.HTTPErroe:http錯誤異常
requests.URLRequired:URL缺失異常
requests.TooManyRedirects:超過最大重定向次數,產生重定向異常
requests.ConnectTimeout:連線遠端伺服器超時異常
requests.Timeyout請求URL是,產生超時異常
requests.raise_for_status():如果不是200,產生requests.HTTPError
1.request.get(url,params=*,**kwargs)
其中後兩個引數可選
import requests
response = requests.get('http://xxxx.xx')
response = requests.get('http://xxxx.xx/?a=xxx&b=sss')
data = {'a'='xxx','b'='sss'}
response = requests.get('http://xxxx.xx',params=data)
payload = {'key1': 'value1', 'key2': 'value2'}
headers = {'content-type': 'application/json'}
response = requests.get("http://xxx.xx", params=payload, headers=headers)
#response的一些屬性:
r = requests.get("https://www.baidu.com")
print r.status_code
#print r.text
print r.encoding
print r.apparent_encoding
#print r.content
#print r.json()
print r.reason
print r.headers
print r.cookies
print r.raw
2.requests.post(url,data=None,json=None,**kwargs)
import requests
data={'a'='xxx','b'='sss'}
response = requests.post('http://xxx.xx',data=data)
url = 'http://httpbin.org/post'
files = {'file': open('test.txt', 'rb')}
r = requests.post(url, files=files)
print r.text
3.request.head(url,**kwargs)
4.requests.put(url,data=None,**kwargs)
5.request.patch(url,data=None,**kwargs)
6.request.delete(url,**kwargs)
以上都大同小異,就不寫了。。。
二、socket庫
-
sk.socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)
引數一:
預設為socket.AF_INET(IPv4),還有socket.AF_INET6(IPv6),socket.AF_UNIX,其中最後一個只能用於單一的UNIX系統程序間通訊
引數二:型別
socket.SOCK_STREAM //流式socket,tcp(預設)
socket.SOCK_DREAM //資料報式socket,udp
引數三:協議
(預設)與特定的地址家族相關的協議,如果是 0 ,則系統就會根據地址格式和套接類別,自動選擇一個合適的協議(非必填)
#建立socket: #TCP socket sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # UDP socke sk = socket.socket(socket.AF_INET,socket.SOCK_DREAM)
1.socket常用函式介紹
因為TCP傳送資料時已經建立好連結,所以不需要指定地,UDP是面向無連結的,每次傳送需要指定。
-
伺服器端函式:
函式名 描述 sk.bind(address) 將套接字繫結到地址,address是元組(host,port) sk.listen(backlog) 開始監聽TCP傳入連結,backlog指定在拒絕連線前,作業系統可以連線的最大連線數,最少為1 sk.accept() 接收TCP連線並返回(conn,address),其中conn是新的套接字物件 -
客戶端函式:
函式名 描述 sk.connect(address) 連線到address處的套接字,address是元組(host,port),如果連接出錯,返回socket.error sk.connect_ex(address) 功能與上相同,但成功返回0,失敗返回erron的值 -
公共函式:
函式 描述 sk.recv(bufsize[,flag]) 接收TCP套接字的資料,資料已字串形式返回,bufsize指定接收最大資料量,flag提供有關訊息的其他資訊,可省略 sk.send(string[,flag]) 傳送TCP資料,返回值是要傳送的位元組數量 sk.sendall(string[,flag]) 傳送完整TCP資料,在返回之前嘗試傳送所有資料,成功返回none,失敗跑出異常 sk.recvfro(bufsize[,flag]) 接收UDP套接字資料,返回值是(data,address)。data是包含接收資料的字串,address是傳送資料的套接字地址 sk.sendto(string[,flag],address) 傳送UDP資料,address是元組(host,port),返回值是傳送的位元組數 sk.close() 關閉套接字 sk.getpeername() 返回套接字的遠端地址,返回值是(host,port) sk.getsockname() 返回套接字自己的地址
2.舉例:
#伺服器端
import socket
host = '192.168.1.123'
port = 4444
sk = socket.socket(socket.AF_INET,socket_STREAM)
sk.bind((host,port))
sk.listen(5)
print 'Conn...'
while True:
print 'conn ok'
conn,addr = accept()
print 'conne form ',addr
while True:
data = sk.soket.recv(1024)
print data
print 'server received your msg'
sk.close()
#客戶端
import socket
host = '192.168.1.123'
port = 4444
sk = socket.socket(socket.AF_INET,socket,STREAM)
sk.connet((host,port))
while True:
msg = input('input msg:')
sk.send(msg)
data = sk.recv(1024)
print data
sk.close()
檢視socket狀態: netstart -an
request和socket大致介紹就這樣了,不是很全,但基本用法都在這了