requests--傳遞參數


傳遞參數 

傳遞URL參數
data = {'city': '北京'}
# 參數有中文如果發送不了,必須要編碼
city = parse.urlencode(data).encode('utf-8')

一般在GET請求中使用查詢字符串(query string)來進行參數傳遞,在requests庫中使用如下方法:

import requests

base_url = 'http://httpbin.org'
# 將參數存在字典里
params_data = {"user": "zou", "pwd": '31500'}

r = requests.get(base_url + '/get', params=params_data)
print(r.url)  # 打印URL
print(r.status_code)

結果

http://httpbin.org/get?user=zou&pwd=31500
200
傳遞body參數

在post請求里有兩個參數,data為form表單格式的,json為Content-Type是json格式的。返回的值如果是json格式的,可以用r.json(),r.text不管是json格式還是html格式的都可以

在POST請求中,一般參數都在請求體中傳遞,在requests中用法如下:

import requests

base_url = 'http://httpbin.org'
# 將參數存在字典里
form_data = {"user": "zou", "pwd": '31500'}

r = requests.post(base_url + '/post', data=form_data)
print(r.url)  # 打印URL
print(r.status_code)
print(r.text)  # 打印出響應文本

結果:

http://httpbin.org/post
200
{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "pwd": "31500", 
    "user": "zou"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "18", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.18.4"
  }, 
  "json": null, 
  "origin": "112.10.81.210, 112.10.81.210", 
  "url": "https://httpbin.org/post"
}

data和json的區別

如果我們發送post請求時,里面有個參數json,還有個參數時data,它們都是提交的服務器的數據,那它們有什么區別呢?

data與json既可以是str,也可以是dict

區別如下:

不管json是str還是dict,如果不指定headers中的content-type,默認為application/json


data為dict時,如果不指定content-type,默認為application/x-www-form-urlencoded,相當於普通form表單提交的形式,此時數據可以從request.POST里面獲取,而request.body的內容則為a=1&b=2的這種形式,注意,即使指定content-type=application/json,request.body的值也是類似於a=1&b=2,所以並不能用json.loads(request.body.decode())得到想要的值

data為str時,如果不指定content-type,默認為application/json

原始響應內容

可以找出 Requests 使用了什么編碼,並且能夠使用r.encoding 屬性來改變它:

r.encoding  # 獲取編碼格式
'utf-8'

r.encoding = 'ISO-8859-1' # 設置編碼格式

在罕見的情況下,你可能想獲取來自服務器的原始套接字響應,那么你可以訪問 r.raw。 如果你確實想這么干,那請你確保在初始請求中設置了 stream=True。具體你可以這么做:

>>> r = requests.get('https://api.github.com/events', stream=True)
>>> r.raw
<requests.packages.urllib3.response.HTTPResponse object at 0x101194810>
>>> r.raw.read(10) '\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03'

如果發送了一個錯誤請求(一個 4XX 客戶端錯誤,或者 5XX 服務器錯誤響應),我們可以通過Response.raise_for_status() 來拋出異常:

>>> bad_r = requests.get('http://httpbin.org/status/404')
>>> bad_r.status_code
404

>>> bad_r.raise_for_status()
Traceback (most recent call last):
  File "requests/models.py", line 832, in raise_for_status
    raise http_error
requests.exceptions.HTTPError: 404 Client Error

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM