Requests詳解


#--Name: Requests庫詳解


0x00 什麼是Requests?

    Request是用Python語音編寫,基於urllib,採用Apache2 Licensed開源協議的HTTP庫.

    比urllib更方便,節省大量的工作,完全滿足HTTP測試需求

    總而言之---Python實現的簡單易用的HTTP庫


0x01 Install It

    pip install requests

    安裝完成後,使用下面的命令驗證安裝是否成功

    import requests


0x02 實例

    

    #實例1:  使用requests的相關方法操作

    import requests


    response = requests.get('https://www.baidu.com') 

    print(type(response))

    print(response.status_code)

    print(type(response.text))

    print(response.cookies)


    #實例2:  各種請求方式

    import requests


    requests.post('http://httpbin.org/post')

    requests.put('http://httpbin.org/put')

    requests.delete('http://httpbin.org/delete')

    requests.get('http://httpbin.org/get')

    requests.head('http://httpbin.org/get')

    requests.options('http://httpbin.org/get')


0x03 請求部分

    #基本GET請求

    #基本寫法:


    import requests


    response = requests.get('http://httpbin.org/get')

    print(requests.text)


    #帶參數的GET請求

    import requests


    response = requests.get('http://httpbin.org/get?name=germey&age=22')

    print(response.text)


    

    #構造GET請求參數

    import requests


    data = {

        'name':'germey',

        'age':22

    }

    response = requests.get('http://httpbin.org/get",params = data)

    print(response.text)


    #解析JSON

    import requests

    import json


    response = requests.get('http://httpbin.org/get')

    print(type(response.text))

    print(response.json())

    print(json.loads(response.text))

    print(type(response.json()))


    #獲取二進制數據

    import requests


    response = request.get('https://github.com/favicon.ico')

    print(type(response.text),type(response.content))

    print(response.text)

    print(response.content)


    #獲取二進制數據並寫入文件

    import requests


    response = request.get('https://github.com/favicon.ico')

    with open('favicon.ico','wb') as f:

        f.write(response.content)

        f.close()



    #添加headers

    #未添加headers,該url返回報錯

    import rquests


    response = requests.get('https://www.zhihu.com/explore')

    print(response.text)


    #添加headers

    import requsts


    headers = {

        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0'

    }

    response = requests.get('https://www.zhihu.com/explore',headers = headers)

    print(response.text)



    #基本POST請求

    import requests


    data = {'name':'germey','age':'22'}

    response = requests.post('http://httpbin.org/post',data=data)

    print(response.text)


    #帶有headers的POST請求

    import requests

    headers = {

        'User-Agent':'Ruby'

    }

    data = {'name':'germey','age':'22'}

    response = requests.post('http://httpbin.org/post',data=data,headers=headers)

    print(response.text)


    #響應部分

    #response 屬性


    import requests


    response = requests.get('https://www.baidu.com')

    print(type(response.status_code),response.status_code)

    print(type(response.headers),response.headers)

    print(type(response.cookies),response.cookies)

    print(type(response.url),response.url)

    response = requests.get('http://www.jd.com')

    print(type(response.history),response.history)



    #狀態碼的判斷

    #判斷狀態碼是否是 ok,也就是http 200 ok

    import requests


    response = requests.get('https://www.baidu.com')

    #exit() if not response.status_code == requests.codes.ok  else print('網站正常')

    if not response.status_code ==  requests.codes.ok:

        exit()

    else:

        print('網站正常')



    #判斷狀態碼是否等於200,同上

    import requests


    response = requests.get('http://www.jianshu.com')

    exit() if not response.status_code == 200 else print('Request Successfully')





    #requests 的高(gao)級(ji)操作

    #文件上傳

    import reqeusts


    files = {'file':open('favicon.ico','rb)}

    response = requests.post('http://httpbin.org/post',files=files)

    print(response.text)



    #獲取Cookie

    import requests


    response = requests.get('https://www.baidu.com')

    print(response.cookies)

    for key,value in response.cookies.items():

        print(key + '=' + value)


    #會話維持  模擬登陸

    #用例1: 未使用Session對象

    import requests


    requests.get('http://httpbin.org/cookies/set/number/123456789')

    response = requests.get('http://httpbin.org/cookies')

    print(response.text)


    #用例2: 使用session對象

    import requests


    s = requests.Session()

    s.get('http://httpbin.org/cookies/set/number/123456789')

    response = requests.get('http://httpbin.org/cookies')

    print(response.text)



    #證書驗證

    #requests打開https的時候,判斷證書是否是合法的,12306的證書是非法的,那麼

    #我們使用常規的方法是無法訪問的

    import requests


    response = requests.get('https://www.12306.cn/')

    print(response.status_code)


    #用例2: 不使用證書訪問https

    import requests


    response = requests.get('https://12306.cn',verify=False)

    print(response.status_code)


    #用例3:  使用證書 使用指定證書和密鑰

    import requests


    response = requests.get('https://12306.cn',cert=('/path/server.crt','/path/key'))

    print(requests.status_code)



    #有關於代理的使用

    #單一代理設置

    import requests


    proxies = {

        'http':'http://127.0.0.1:9991',

        'https':'https://127.0.0.1:9991'

    }


    response = requests.get('https://www.taobao.com',proxies=proxies)

    print(response.status_code)


    #用例2: 帶用戶名密碼的代理設置

    import requests


    proxies={

        'http':'http://user:[email protected]:9991'

    }

    response = requests.get('https://www.taobao.com',proxies=proxies)

    print(response.status_code)


    #用例3: 使用Socks代理

    pip install requests[socks]

    import requests


    proxies = {

        'http':'socks5://127.0.0.1:×××',

        'https':'socks5://127.0.0.1:×××'

    }

    response = requests.get('https://www.taobao.com',proxies=proxies)

    print(response.status_code)




    #超時設置

    import requests

    response = requests.get('https://www.taobao.com',timeout = 1)

    print(response.status_code)




    #認證設置

    #對於認證頁面,需要使用認證方式

    #用例1: 未設置認證值

    import requests

    from requests.auth import HTTPBasicAuth


    r = requests.get('http://127.0.0.1:1111')

    print(r.status_code)



    #用例2: 設置認證值

    import requests

    from requests.auth import HTTPDigestAuth


    r = requests.get('http://192.168.16.1',auth=HTTPDigestAuth('aaa','123456'))

    print(r.status_code)




    #異常處理

    import requests

    from requests.exceptions import ReadTimeout,HTTPError,RequestException

    try:

        response = requests.get('http://httpbin.org/get',timeout = 0.1)

        print(response.status_code)

    except ReadTimeout:

        print('Time Out!!!')

    except HTTPError:

        print('HTTP Error!!!')

    except RequestException:

        print('Error!!!')



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