一、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大致介紹就這樣了,不是很全,但基本用法都在這了
