TypeError:无法将字节连接到str时如何转换为字节

Nvachhan

我正在尝试通过API发送数据,但遇到TypeError:无法将字节连接到str。据我了解,这意味着我需要将部分代码转换为字节,但不确定如何执行此操作。我尝试在前面添加b或使用bytes('data'),但可能将它们放置在错误的区域。

import http.client

conn = http.client.HTTPSConnection("exampleurl.com")

payload = {
    'FilterId': "63G8Tg4LWfWjW84Qy0usld5i0f",
    'name': "Test",
    'description': "Test1",
    'deadline': "2017-12-31",
    'exclusionRuleName': "Exclude",
    'disable': "true",
    'type': "Type1"
    }

headers = {
    'content-type': "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW",
    'x-csrf-token': "wWjeFkMcbopci1TK2cibZ2hczI",
    'cache-control': "no-cache",
    'postman-token': "23c09c76-3b030-eea1-e16ffd48e9"
    }


conn.request("POST", "/api/campaign/create", payload, headers)


res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))

这是问题所在:

conn.request("POST", "/api/campaign/create", payload, headers)

我不确定什么以及如何转换为字节。

姆霍克

使用requests如果可以的话,它是与工作轻松多了。

否则,您需要urlencode将有效负载发布到服务器。有效负载的url编码版本如下所示:

description = Test1&exclusionRuleName = Exclude&FilterId = 63G8Tg4LWfWjW84Qy0usld5i0f&deadline = 2017-12-31&type = Type1&name = Test&disable = true

这是一个工作示例:

import http.client
from urllib.parse import urlencode

conn = http.client.HTTPSConnection("httpbin.org")

payload = {
    'FilterId': "63G8Tg4LWfWjW84Qy0usld5i0f",
    'name': "Test",
    'description': "Test1",
    'deadline': "2017-12-31",
    'exclusionRuleName': "Exclude",
    'disable': "true",
    'type': "Type1"
    }

headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'x-csrf-token': "wWjeFkMcbopci1TK2cibZ2hczI",
    'cache-control': "no-cache",
    'postman-token': "23c09c76-3b030-eea1-e16ffd48e9"
    }

conn.request("POST", "/post", urlencode(payload), headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))

http://httpbin.org返回此JSON响应:

{ 
  “ args”:{},
  “ data”:“”,
  “ files”:{},
  “ form”:{ 
    “ FilterId”:“ 63G8Tg4LWfWjW84Qy0usld5i0f”,
    “ deadline”:“ 2017-12-31”,
    “ description” ::“ Test1”,
    “ disable”:“ true”,
    “ exclusionRuleName”:“ Exclude”,
    “ name”:“ Test”,
    “ type”:“ Type1” 
  },
  “ headers”:{ 
    “ Accept-Encoding”:“身份”,
    “缓存控件”:“无缓存”,
    “连接”:“关闭”,
    “Content-Length”:“ 133”, 
    “ Content-Type”:“ application / x-www-form-urlencoded”,
    “ Host”:“ httpbin.org”,
    “ Postman-Token”:“ 23c09c76-3b030-eea1- e16ffd48e9“,
    “ X-Csrf-Token”:“ wWjeFkMcbopci1TK2cibZ2hczI” 
  },
  “ json”:null,
  “ origin”:“ 220.233.14.203”,
  “ url”:“ https://httpbin.org/post” 
}

请注意,我使用httpbin.org作为测试服务器,并发布到https://httpbin.org/post

另外,我将Content-type标头更改为application / x-www-form-urlencoded,因为这是urlencode()返回的格式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章