冒着离题的风险,我会试一试:
我有一个用 python 编写的小脚本,它应该POST
是特定 URL 上的一些数据。问题是:
- 我正在将此脚本集成到zenoss中:
这是zenoss(GUI)的路径
`Events(http://ip:port/zport/dmd/Events/evconsole)->click on some event class->settings->transform(here I copy-paste my script)`
当事件被触发时,脚本会被调用,但即使脚本运行正确,它也不会POST
向其他 IP(不同的服务器)发送数据 - 我在日志或 GUI 中没有收到任何错误消息。所以,我想在网络层面有一些限制,并且不知何故POST
,Zenoss 没有发送 ed 数据。
你们能告诉我我应该修改什么(可能是.conf
文件或hosts
文件)或者我应该怎么做才能POST
在另一台服务器上处理一些数据?
代码在这里(如果相关):
import urllib2 as urllib
from urllib import urlencode
from os.path import join as joinPath
from traceback import print_tb
from os.path import isfile
from sys import exc_info
gh_url = 'http://ip/txsms.cgi'
APPLICATION_PATH = '/srv/sms_alert/'
ALERT_POINT_PATH = joinPath(APPLICATION_PATH, 'alert_contact')
try:
evt.data = 'Some text'
isInProduction = False
if evt.prodState == 1000:
isInProduction = True
if isInProduction and isfile(ALERT_POINT_PATH):
alertContactContent = None
with open(ALERT_POINT_PATH, 'r') as alertContactFile:
alertContactContent = alertContactFile.read()
alertContactContent = alertContactContent.splitlines()
if alertContactContent:
evt.summary = '#[ SMS ALERT ]# {}'.format(evt.summary)
for alertContactContentLine in alertContactContent:
data = {'phonenr': alertContactContentLine, 'smstxt': evt.summary, 'Submit': 'SendSms'}
urllib.urlencode(data)
req = urllib.Request(gh_url, data)
password_manager = urllib.HTTPPasswordMgrWithDefaultRealm()
password_manager.add_password(None, gh_url, 'admin', 'password')
auth_manager = urllib.HTTPBasicAuthHandler(password_manager)
opener = urllib.build_opener(auth_manager)
urllib.install_opener(opener)
handler = urllib.urlopen(req)
else:
evt.summary = '#[ ERROR: SMS ALERT NO CONTACT ]# {}'.format(evt.summary)
except Exception as e:
ex_type, ex, tb = exc_info()
print('\n #[ERROR]# TRANSFORM: exception: {ex}\n'.format(ex=e))
print('\n #[ERROR]# TRANSFORM: exception traceback: {trace}\n'.format(trace=print_tb(tb)))
所以更具体地说:
我正在尝试进行身份验证,然后将POST
一些数据发送到:http://ip/txsms.cgi
。如果我直接从我的 CentOS 机器运行脚本(并删除事件 - 因为它们只能在 zenoss 内部使用)它可以工作并且完成我想要的,但是当我在 Zenoss 中复制粘贴代码时,数据不是编辑POST
。
对此有什么想法吗?(我怎么能做到这一点)