【问题标题】:Python mulitpart/formdata POST request within Zapier CodeZapier 代码中的 Python 多部分/表单数据 POST 请求
【发布时间】:2018-09-16 01:11:45
【问题描述】:

我目前正在使用 Zapier 来自动化一些任务,但我遇到了以下问题:

我正在尝试使用包含文件的 Zapier Webhooks 发送 POST 请求。我可以通过邮递员让它工作,因为 Debitoor 的 API(我要发送到的地方)非常清楚。

但是,我无法使其在 Zapier Webhooks 中运行。我还尝试使用 Zapier Code (Python),因为我可以从邮递员那里查看 python 代码。但我对此并不熟悉,可能需要一些帮助才能开始。

1.) 首先,这是 API 参考:https://developers.debitoor.com/api-reference#files

2.) 然后我使用 Postman 和这段代码(Python 请求),它正在工作:

import requests

url = "https://api.debitoor.com/api/files/v1"

querystring = {"token":"eyJ1c2VyIjoiNWE0NmVjYjUxOTE0ODEwMDFjMTkxYzZmIiwiYXBwIjoiNTdiMmZlMDkxZTkwMjQwZjAwNDZhNWEyIiwiY2hhbGxlbmdlIjowLCIkZSI6MCwiJHQiOjE1MjE4NzAwNTQ1OTd9CsKRw5xbw5_DhHUWw5QJw4zDj8KnXsOaeMKA","fileName":"test.pdf"}

payload = "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"file\"; filename=\"Bildschirmfoto 2018-04-05 um 09.59.46 1.png\"\r\nContent-Type: image/png\r\n\r\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--"
headers = {
    'content-type': "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW",
    'cache-control': "no-cache",
    'postman-token': "716e7723-2dc1-6384-059d-960feb563443"
}

response = requests.request("POST", url, data=payload, headers=headers, params=querystring)

print(response.text)

3.) 试图将代码复制到 Zapier Code,但我不知道如何实现该文件。在 Zapier 中,我触发了一封入站电子邮件以获取附件,然后将其“水合”。它看起来像这样:

hydrate|||.eJwtjMsOwiAUBf_lrosKNFDZu3Xh1hjC46KklTaFxDRN_11qXJ7JzFkhplxMcqijB8U5l7yT5wZCxMHrZN4Iqo4BMzTgXuh63eMCioruLKiobEwFU9FlmXb1WrX-Y-ZnBrX-Qj2NsSpzBfcV_o-3C2GUisPkwx7sj5D5UQpDmeMnwqW1pPWBE-OYJdYwdCJQT9sWtse2fQEK1Tjl:1eqY0S:s2Ek27XO54PVSm9q_mVMDN8o1uY|||hydrate

如何将 Python 代码连接到水合文件?我对文件没有经验,也找不到任何有用的帮助。希望有人有想法?

【问题讨论】:

  • 你能用你用于传出 webhook 的配置更新你的问题吗?我认为这就是我们要让它发挥作用的方式。
  • @xavdid 你的意思是 Zapier Webhook 配置吗?
  • 找到了解决方法:当我使用来自例如的文件时Dropbox 而不是来自入站 Zapier 电子邮件的 Zapier Webhook 工作得很好。如果有人知道如何使用这个“水合物|||...”文件,我很高兴听到解决方案。

标签: python webhooks zapier


【解决方案1】:

我试图将 AWS S3 文件导入我的 API。

事实证明,Zapier 就像这里描述的那样为我的文件添加了水分。

然后我成功地提取了我的文件内容并将其发送到我的 API,如下所示:

import urllib.request

auth_token = input_data['auth_token'] # Authentication token for my API
csv_file = input_data['csv_file'] # The "hydrate|||..." variable: that's my S3 file
file_type = 'text/csv'

fp = urllib.request.urlopen(csv_file)
file_bytes = fp.read() # Binary content of my S3 file
fp.close()

url = 'http://my.api.com/importer/resource'
headers = {
  'accept': 'application/vnd.api-v1+json',
  'authorization': auth_token,
  'user-agent': 'Zapier'
}

files = {'csv_file': ('bulk_resources.csv', file_bytes, file_type, {'Expires': '0'})}

response = requests.post(url, headers=headers, files=files)

return response.json()

【讨论】:

  • 你能再解释一下吗?
猜你喜欢
  • 2012-11-27
  • 2017-10-05
  • 2014-06-01
  • 2013-07-20
  • 2020-04-25
  • 2016-06-29
  • 2023-03-04
  • 2022-12-05
相关资源
最近更新 更多