最新消息:20210917 已从crifan.com换到crifan.org

【已解决】Python中requests的POST发送类型application/x-www-form-urlencoded的数据

form crifan 1368浏览 0评论
折腾:
【未解决】爬取mp.codeup.cn中的英语教材电子书资源
期间,希望搞清楚requests中,如何发送数据是application/x-www-form-urlencoded
requests application/x-www-form-urlencoded
Quickstart — Requests 0.8.2 documentation
Python requests module sends JSON string instead of x-www-form-urlencoded param string – Stack Overflow
好像是:
本身:
curHeaders["Content-Type"] = "application/x-www-form-urlencoded"

    postDict = {
      "ebookId": eachBookId
    }
    resp = requests.post(getAllPageUrl, headers=curHeaders, data=postDict)
此处,数据就是x-www-form-urlencoded类型的。
否则如果是要json的字符串的话,则是:
curHeaders["Content-Type"] = "application/json"

    postDict = {
      "ebookId": eachBookId
    }

    resp = requests.post(getAllPageUrl, headers=curHeaders, data=postJsonStr)
的写法了。
对此,可以借用
httpbin.org
http://httpbin.org
去调试验证
【总结】
最后用代码测试如下:
# Function: Demo requests
# Author: Crifan Li
# Update: 20200303


import json
import requests


postUrl = "http://httpbin.org/post"
postDataDict = {
  "ebookId": "52365"
}


gContentTypeList = [
  "application/x-www-form-urlencoded",
  "application/json"
]


for curContentType in gContentTypeList:
  print("%s post: %s %s" % ('-'*20, curContentType, '-'*20))
  curHeaders = {
    "Content-Type": curContentType
  }
  print("curHeaders=%s" % curHeaders)
  if curContentType == "application/json":
    curPostData = json.dumps(postDataDict)
  else:
    curPostData = postDataDict
  print("curPostData=%s" % curPostData)
  resp = requests.post(postUrl, headers=curHeaders, data=curPostData)
  respText = resp.text
  print("respText=\n%s" % respText)


"""
-------------------- post: application/x-www-form-urlencoded --------------------
curHeaders={'Content-Type': 'application/x-www-form-urlencoded'}
curPostData={'ebookId': '52365'}
respText=
{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "ebookId": "52365"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "13", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.22.0", 
    "X-Amzn-Trace-Id": "Root=1-5e5e5082-f5f8bff509e7f8a448c1e57a"
  }, 
  "json": null, 
  "origin": "117.82.228.217", 
  "url": "http://httpbin.org/post"
}


-------------------- post: application/json --------------------
curHeaders={'Content-Type': 'application/json'}
curPostData={"ebookId": "52365"}
respText=
{
  "args": {}, 
  "data": "{\"ebookId\": \"52365\"}", 
  "files": {}, 
  "form": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "20", 
    "Content-Type": "application/json", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.22.0", 
    "X-Amzn-Trace-Id": "Root=1-5e5e5084-b74e24a0898f623c8ee1411a"
  }, 
  "json": {
    "ebookId": "52365"
  }, 
  "origin": "117.82.228.217", 
  "url": "http://httpbin.org/post"
}
"""
即可很清楚了上述逻辑了。

转载请注明:在路上 » 【已解决】Python中requests的POST发送类型application/x-www-form-urlencoded的数据

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
90 queries in 0.180 seconds, using 23.42MB memory