2014-12-22 3 views
1

Как отправить строку json в следующий скрипт с помощью webhook?Как передать форматированную строку json в качестве полезной нагрузки для работника iron.io через webhook?

Ниже мой сценарий на iron.io, что я хочу прочитать полезную нагрузку.

import sys, json 

sys.argv[8] 

payload_file = None 
payload = None 


    for i in range(len(sys.argv)): 

     if sys.argv[i] == "-payload" and (i + 1) < len(sys.argv): 
      payload_file = sys.argv[i + 1] 
      with open(payload_file,'r') as f: 
       payload = json.loads(f.read()) 
       print "printing resulting payload: " + str(payload) 
      break 

Когда я в очередь JSon отформатированная строки в платформе, я получаю желаемый результат, который вы можете увидеть ниже:

JSon отформатированной строка, которую я занесен

{u'env': u'production'} 

Вход показанного на Железе .io

printing resulting payload: {u'env': u'production'} 

Я хотел бы добиться того же результата с помощью веб-хостинга с помощью следующий javascript.

post('https://worker-aws-us-east-1.iron.io/2/projects/PROJECTKEY/tasks/webhook?code_name=CODENAME&oauth=OAUTH', { 
    payload: { 
     "tasks": [{ 
      "code_name": "firebase_email_webhook", 
      "payload": "{u'env': u'production'}" 
     }] 
    } 
}) 


function post(path, params, method) { 
    method = method || "post"; // Set method to post by default if not specified. 

    var form = document.createElement("form"); 
    form.setAttribute("method", method); 
    form.setAttribute("action", path); 

    for (var key in params) { 
     if (params.hasOwnProperty(key)) { 
      var hiddenField = document.createElement("input"); 
      hiddenField.setAttribute("type", "hidden"); 
      hiddenField.setAttribute("name", key); 
      hiddenField.setAttribute("value", params[key]); 

      form.appendChild(hiddenField); 
     } 
    } 

    document.body.appendChild(form); 
    form.submit(); 
} 

Вызов webhook работает нормально, но проблема в том, что я получаю следующее сообщение об ошибке:

Traceback (most recent call last): 
    File "firebase_email_webhook.py", line 32, in <module> 
    payload = json.loads(f.read()) 
    File "/usr/lib/python2.7/json/__init__.py", line 326, in loads 
    return _default_decoder.decode(s) 
    File "/usr/lib/python2.7/json/decoder.py", line 366, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "/usr/lib/python2.7/json/decoder.py", line 384, in raw_decode 
    raise ValueError("No JSON object could be decoded") 
ValueError: No JSON object could be decoded 

ответ

2

Webhook конечная точка получает неизмененной содержимое POST в качестве полезной нагрузки. просто отправьте json, и все готово.

Код заимствованный из https://stackoverflow.com/a/6587249/1758892

var arr = { City: 'Moscow', Age: 25 }; 
$.ajax({ 
    url: 'Ajax.ashx', 
    type: 'POST', 
    data: JSON.stringify(arr), 
    contentType: 'application/json; charset=utf-8', 
    dataType: 'json', 
    async: false, 
    success: function(msg) { 
     alert(msg); 
    } 
});