1. 程式人生 > 程式設計 >python request 模組詳細介紹

python request 模組詳細介紹

request

  Requests 是使用 Apache2 Licensed 許可證的 基於Python開發的HTTP 庫,其在Python內建模組的基礎上進行了高度的封裝,從而使得Pythoner進行網路請求時,變得美好了許多,使用Requests可以輕而易舉的完成瀏覽器可有的任何操作。

GET 請求

# 1、無引數例項

import requests

ret = requests.get('https://github.com/timeline.json')

print ret.url
print ret.text



# 2、有引數例項

import requests

payload = {'key1': 'value1','key2': 'value2'}
ret = requests.get("http://httpbin.org/get",params=payload)
print ret.url
print ret.text

POST 請求

# 1、基本POST例項

import requests

payload = {'key1': 'value1','key2': 'value2'}
ret = requests.post("http://httpbin.org/post",data=payload)

print ret.text


# 2、傳送請求頭和資料例項

import requests
import json

url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}
headers = {'content-type': 'application/json'}

ret = requests.post(url,data=json.dumps(payload),headers=headers)
print ret.text
print ret.cookies 

其他請求

requests.get(url,params=None,**kwargs)
requests.post(url,data=None,json=None,**kwargs)
requests.put(url,**kwargs)
requests.head(url,**kwargs)
requests.delete(url,**kwargs)
requests.patch(url,**kwargs)
requests.options(url,**kwargs)

# 以上方法均是在此方法的基礎上構建
requests.request(method,url,**kwargs)

requests.request()引數

method:提交方式 get/post 。

url:提交地址。

params:在URL上傳遞的引數,GET形式傳遞到後臺,例如向http://www.oldboyyede.com上傳資料。

requests.request(

  method = 'GET',  url = 'http://www.oldboyyede.com',  params = { 'k1' : 'v1','k2' : 'v2' }

)

# http://www.oldboyyede.com?k1=v1&k2=v2

data:在請求體裡面傳遞的資料,後面可以是字典,位元組等資料型別。

requests.request(

  method = 'POST',  # data= { 'k1' : 'v1','k2' : 'v2','x':[1,2,3]}

  data=" user=wjw&pwd=123123 "

)

json:在請求體裡面傳遞資料,把整體序列化成一個大字串,字典中巢狀字典的話用JSON 。

requests.request(

  method = 'POST',  json= { 'k1' : 'v1','k2' : 'v2' }

)

# "{ 'k1' : 'v1','k2' : 'v2' }"

headers:請求頭。

一定要新增瀏覽器,不然可能會遇到網路防火牆

python request 模組詳細介紹

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0'}

# 一定要新增瀏覽器,不然可能會遇到網路防火牆攔截你的請求
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0'}

r1 = requests.get(
url='http://dig.chouti.com/',headers=headers
)

files:上傳檔案物件。

# 模組的詳細使用
import requests

requests.post(
url='xxxxxx',files={
# 'f1':open('s1.py','rb')
# 可以上傳元祖的形式上傳,sssss1.py為後臺獲取的名稱
'f1': open('sssss1.py',('s1.py','rb'))
}
)

引數例項

def param_method_url():
# requests.request(method='get',url='http://127.0.0.1:8000/test/')
# requests.request(method='post',url='http://127.0.0.1:8000/test/')
pass


def param_param():
# - 可以是字典
# - 可以是字串
# - 可以是位元組(ascii編碼以內)

# requests.request(method='get',# url='http://127.0.0.1:8000/test/',# params={'k1': 'v1','k2': '水電費'})

# requests.request(method='get',# params="k1=v1&k2=水電費&k3=v3&k3=vv3")

# requests.request(method='get',# params=bytes("k1=v1&k2=k2&k3=v3&k3=vv3",encoding='utf8'))

# 錯誤
# requests.request(method='get',# params=bytes("k1=v1&k2=水電費&k3=v3&k3=vv3",encoding='utf8'))
pass


def param_data():
# 可以是字典
# 可以是字串
# 可以是位元組
# 可以是檔案物件

# requests.request(method='POST',# data={'k1': 'v1','k2': '水電費'})

# requests.request(method='POST',# data="k1=v1; k2=v2; k3=v3; k3=v4"
# )

# requests.request(method='POST',# data="k1=v1;k2=v2;k3=v3;k3=v4",# headers={'Content-Type': 'application/x-www-form-urlencoded'}
# )

# requests.request(method='POST',# data=open('data_file.py',mode='r',encoding='utf-8'),# 檔案內容是:k1=v1;k2=v2;k3=v3;k3=v4
# headers={'Content-Type': 'application/x-www-form-urlencoded'}
# )
pass


def param_json():
# 將json中對應的資料進行序列化成一個字串,json.dumps(...)
# 然後傳送到伺服器端的body中,並且Content-Type是 {'Content-Type': 'application/json'}
requests.request(method='POST',url='http://127.0.0.1:8000/test/',json={'k1': 'v1','k2': '水電費'})


def param_headers():
# 傳送請求頭到伺服器端
requests.request(method='POST','k2': '水電費'},headers={'Content-Type': 'application/x-www-form-urlencoded'}
)


def param_cookies():
# 傳送Cookie到伺服器端
requests.request(method='POST',data={'k1': 'v1','k2': 'v2'},cookies={'cook1': 'value1'},)
# 也可以使用CookieJar(字典形式就是在此基礎上封裝)
from http.cookiejar import CookieJar
from http.cookiejar import Cookie

obj = CookieJar()
obj.set_cookie(Cookie(version=0,name='c1',value='v1',port=None,domain='',path='/',secure=False,expires=None,discard=True,comment=None,comment_url=None,rest={'HttpOnly': None},rfc2109=False,port_specified=False,domain_specified=False,domain_initial_dot=False,path_specified=False)
)
requests.request(method='POST',cookies=obj)


def param_files():
# 傳送檔案
# file_dict = {
# 'f1': open('readme','rb')
# }
# requests.request(method='POST',# files=file_dict)

# 傳送檔案,定製檔名
# file_dict = {
# 'f1': ('test.txt',open('readme','rb'))
# }
# requests.request(method='POST',"hahsfaksfa9kasdjflaksdjf")
# }
# requests.request(method='POST',"hahsfaksfa9kasdjflaksdjf",'application/text',{'k1': '0'})
# }
# requests.request(method='POST',# files=file_dict)

pass
<br>
# 做基本認證 header中加密的使用者名稱和密碼
def param_auth():
from requests.auth import HTTPBasicAuth,HTTPDigestAuth

ret = requests.get('https://api.github.com/user',auth=HTTPBasicAuth('wangjiawei','sdfasdfasdf'))
print(ret.text)

# ret = requests.get('http://192.168.1.1',# auth=HTTPBasicAuth('admin','admin'))
# ret.encoding = 'gbk'
# print(ret.text)

# ret = requests.get('http://httpbin.org/digest-auth/auth/user/pass',auth=HTTPDigestAuth('user','pass'))
# print(ret)
#

# 請求和響應的超時時間
def param_timeout():
# ret = requests.get('http://google.com/',timeout=1)
# print(ret)

# ret = requests.get('http://google.com/',timeout=(5,1))
# print(ret)
pass
<br>
# 是允許否重定向
def param_allow_redirects():
ret = requests.get('http://127.0.0.1:8000/test/',allow_redirects=False)
print(ret.text)
<br>
# 代理 出口IP 不是本機IP。 流程是:先給代理髮,代理幫助我們向目的地址發。
def param_proxies():
# proxies = {
# "http": "61.172.249.96:80",# "https": "http://61.185.219.126:3128",# }

# proxies = {'http://10.20.1.128': 'http://10.10.1.10:5323'}

# ret = requests.get("http://www.proxy360.cn/123456",proxies=proxies)
# print(ret.headers)


# from requests.auth import HTTPProxyAuth
#
# proxyDict = {
# 'http': '77.75.105.165',# 'https': '77.75.105.165'
# }
# auth = HTTPProxyAuth('username','mypassword')
#
# r = requests.get("http://www.google.com",proxies=proxyDict,auth=auth)
# print(r.text)

pass
<br>
# 流形式 比如下片
def param_stream():
ret = requests.get('http://127.0.0.1:8000/test/',stream=True)
print(ret.content)
ret.close()

# from contextlib import closing
# with closing(requests.get('http://httpbin.org/get',stream=True)) as r:
# # 在此處理響應。迭代處理
# for i in r.iter_content():
# print(i)


def requests_session():
import requests

session = requests.Session()

### 1、首先登陸任何頁面,獲取cookie

i1 = session.get(url="http://dig.chouti.com/help/service")

### 2、使用者登陸,攜帶上一次的cookie,後臺對cookie中的 gpsd 進行授權
i2 = session.post(
url="http://dig.chouti.com/login",data={
'phone': "8612345678977",'password': "xxxxxx",'oneMonth': ""
}
)

i3 = session.post(
url="http://dig.chouti.com/link/vote?linksId=8589623",)
print(i3.text)

http 與 https 區別

  • http

  本質上就是 socket,http 請求不安全,因為沒有任何的加密措施。

  • https

  擁有加密措施,ssh 加密,有證書一說,伺服器給請求的客戶端頒發證書,客戶端使用證書對客戶端傳送的資料加密成密文,然後傳送給伺服器,伺服器通過證書進行解密,檢測是否是匹配的,進行傳輸資訊。通訊間必須使用證書。cert引數是證書,主動提供證書,可以自己製作(缺錢的話),比如證書是“fuck.pem”,cert=('fuck.pem'),必須使用證書,如果沒有證書則不能進行通訊。還有一類證書需要自己買的第三方可信賴的證書,系統在建立(一裝機)的時候直接植入證書,廠商幫忙做驗證,這就是有錢和沒錢的區別,使用者不需要自己在瀏覽器上安裝證書了,pem是證書的格式,cert=('fuck.crt','xxx.key'),和自己辦法的沒區別,需要啥樣給啥樣,完成的事都是做加密使用。還有一個引數叫 verify,如果 verify=False,則表示忽略證書,直接發請求直接拿結果,一般網站是允許用的,但是伺服器必須要證書也白搭。

以上就是python request 模組詳細介紹的詳細內容,更多關於python request 模組的資料請關注我們其它相關文章!