python實現Content-Type類型為application/x-www-form-urlencoded發送POST請求


  周日晚上接到公司的電話需要通過新榜的接口拿下微博熱搜數據,拿到接口文檔看了下很簡單的一個post請求,主要根據時間段來獲取熱搜數據。

  

  在實際編碼的過程中經常遇到header的Content-Type的類型主要是application/json格式,我這里也沒有考慮到與application/x-www-form-urlencoded區別還按照以前方式來寫代碼,每次請求都會提示"缺少必要參數",我這里明明已經傳入body數據為什么依然報錯,所以回頭查詢下文檔,發現Content-Type的類型為application/x-www-form-urlencoded時,body的格式不是json格式,所以會報錯。

  application/x-www-form-urlencoded屬於比較常用的POST 提交數據的方式。瀏覽器的原生 form 表單,如果不設置 enctype 屬性,那么最終就會以 application/x-www-form-urlencoded 方式提交數據。
  如果Content-Type 設置為 application/x-www-form-urlencoded;此時body提交的數據需要按照 k1=v1&k2=v2 的方式進行編碼,然后進行提交,下面我們看看python代碼如何實現。

# -*- coding: utf-8 -*-
# @Time    : 2018/7/24 15:22
# @Author  : Hunk
# @Email   : qiang.liu@ikooo.cn
# @File    : example.py
# @Software: PyCharm
import requests
import json
from urllib import parse

# 定義請求header
HEADERS = {'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8', 'Key': '332213fa4a9d4288b5668ddd9'}
# 定義請求地址
url = "https://api.newrank.cn/api/sync/weibo/trend"
# 通過字典方式定義請求body
FormData = {"from": '2018-07-18 16:00:00', "to": '2018-07-18 18:00:00', "page": 1, "size": 1}
# 字典轉換k1=v1 & k2=v2 模式
data = parse.urlencode(FormData)
# 請求方式
content = requests.post(url=url, headers=HEADERS, data=data).text
content = json.loads(content)
print(content)

 


免責聲明!

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



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