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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章