Python__request,socket模块

[TOC]


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

0%