zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    nginx $remote_addr 详解
    Alipay SDK验签PHP低于5.5版本错误
    Alipay支付宝调用错误:Call to undefined function openssl_sign()
    nginx.conf 下日志host.access.log 说明
    vim全选,全部复制,全部删除
    jquery 获取上传文件大小
    linux网络配置
    crontab 定时任务简单备份数据库
    linux进程管理
    mysql 动态增加列,查找表中有多少列,具体什么列。 通过JSON生成mysql表 支持子JSON
  • 原文地址:https://www.cnblogs.com/mengyu/p/9360296.html
Copyright © 2011-2022 走看看