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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM