requests模块

dns

服务器端
    bind powerdns dnsmasq
    常见的dns记录类型有:
    A       :ipv4 主机地址
    AAAA    :IPv6主机地址
    NS      :权威名称服务器
    CNAME   :别名
    SOA     :标记权威区域的开始
    PTR     :反向dns记录
    MX      :邮件交换,邮件域名必须要提供反解(可以邮件服务器不进行反解)
    TXT     :文本字符串一般记录说明信息
    SRV     :SRV记录是服务器资源记录的缩写,SRV记录的作用是说明一个服务器能够提供什么样的服务!
             SRV记录在微软的Active Directory中有着重要地位,因为域内的计算机要依赖DNS的SRV记录来定位域控制器!
客户端
    linux:
        dig  nslookup  host
        dig +short www.baidu.com
        dig +trace www.baidu.com
        一般客户端的请求必须递归响应
        一般服务器之间的请求为迭代

    python:
        dnspython
        #pip3 install dnspython

        例: 查询百度的ip
            from dns import resolver
            ret = resolver.query('www.baidu.com','A')
            for ip in ret:
                print(ip)
        例: 查询腾讯的邮箱服务器
            from dns import resolver                
            ret = resolver.query('qq.com','MX')
            for ip in ret:
                print(ip)

requests

http的客户端,可以访问http资源
http协议
    0.9版本,只有一作用就是传送文件
    1.0  有了响应头及内容
        get
        post
        head
        option put delete patch trace
    2.* 

浏览器: 可以解析http协议 
        可以分析渲染html文件 
        后端:
            可以使用任意语言,大部分使用java  python php  javascript
        前端:
            html            这是一个网页的框架,html格式的纯文本文件 
            css             层叠样式表,化妆
            javascript      是一种浏览器的解释语言(和python,php是一样),主要负责交互
            静态文件(图片,视频,音乐,文档)



    请求报文
        <method>  <request-URI>  <version>   起始行
        <headers>   报文首部

        <entity-body>  报文主体

    响应报文
        <version>  <status>   <reason-phrase>
        <headers>

        <entity-body>

爬虫:
本质就是一个http客户端
python写爬虫: scrapy , requests(urllib urllib3)

#pip3 install requests

url :
协议://域名:端口/[路径1/路径2/文件名?name=libai&score=100#锚点]

get请求
http://httpbin.org/
专门用来学习http协议
每个网站的url是不同的,因为这个是专门学习用的,所以它的url特别简单

示例: 发送一个get请求
import requests
req = requests.get(url=‘http://httpbin.org/get’)
print(req.text) 得到请求资源的文本信息
print(req.content) 得到请求资源的二进制数据
print(req.json()) 如果响应的为json格式可以直接将其转化成字典
print(req.status_code) 响应状态码
print(req.headers) 响应头信息
示例: 发送一个get参数给服务器
import requests

    # url = 'http://httpbin.org/get?name=libai&password=123456'
    url = 'http://httpbin.org/get'
    data = {
        'name':'libai',
        'pass':'123456',
    }

    # req = requests.get(url=url)
    req = requests.get(url=url,params=data)
    print(req.text)

示例: requests常用参数
#params get请求传参数
#headers 定制请求头
#timeout 指定超时时间
#verify 当请求的加密时,完全相信对方的身份,不进行CA验证
import requests

    url = 'http://httpbin.org/get'
    data = {
        'name':'libai',
        'pass':'123456',
    }
    headers = {
        'User-Agent':r'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
    }

    req = requests.get(url=url,params=data,headers=headers,timeout=10,verify=False)
    print(req.text)

post请求
因为get请求信息完全暴露并且url上面传的数据量有限,而且不支持文件

示例1: 发送数据
    import requests

    url = 'http://httpbin.org/post?score=100'
    data = {
        'name':'libai',
        'pass':'123456',
    }
    headers = {
        'User-Agent':r'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
    }

    req = requests.post(url=url,data=data,headers=headers,timeout=10,verify=False)
    print(req.text)

示例2: 发送文件
    import requests

    url = 'http://httpbin.org/post?score=100'
    data = {
        'name':'libai',
        'pass':'123456',
    }
    files = {
        'filed1':('c.txt',open('c.txt','r').read()),
        'filed2':('a.png',open('abc.png','rb').read(),'image/png'),
    }
    headers = {
        'User-Agent':r'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
    }

    req = requests.post(url=url,data=data,headers=headers,timeout=10,files=files)
    print(req.text)

使用代理 : 翻墙,防止被封杀
import requests
proxies = {
“http”: “http://10.10.1.10:3128”,
“https”: “http://10.10.1.10:1080”,
}
#如果代理需要账户和密码,则需这样:
#proxies = {
# “http”: “http://user:[email protected]:3128/”,
#}
requests.get(“http://www.baidu.com”, proxies=proxies)
cookie 是保存在浏览器中的一个纯文本文件
示例1: 默认requests是不会保持会话的,即不会每次带着cookie
import requests
url = ‘http://httpbin.org/cookies

headers = {
    'User-Agent':r'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
}

req = requests.get(url=url,headers=headers,timeout=10)
print(req.text)


url1 = 'http://httpbin.org/cookies/set/name/libai'
req = requests.get(url=url1,headers=headers,timeout=10)
print(req.text)


req = requests.get(url=url,headers=headers,timeout=10)
print(req.text)

示例2: 保持会话
import requests
session = requests.Session()

url = 'http://httpbin.org/cookies'

headers = {
    'User-Agent':r'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
}

req = session.get(url=url,headers=headers,timeout=10)
print(req.text)

url1 = 'http://httpbin.org/cookies/set/name/libai'
req = session.get(url=url1,headers=headers,timeout=10)
print(req.text)

req = session.get(url=url,headers=headers,timeout=10)
print(req.text)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章