2013-01-11 46 views
2

我正在开发一个应用程序,它连接到一个web服务,提供一个带有数据的json字符串并接收回复。 我使用下面的代码,我在那里构建JSON,并尝试将它张贴:django/python如何通过发布json连接到web服务

def connectToService(request): 
    data='foxp3 factor' 
    l=[] 
    l.append(data) 
    l.append(80) 
    l.append(5) 
    data=json.dumps({"findCitations":l}) 
    result = urllib2.urlopen('http://www.example.com/webservice', urllib.urlencode(data)) 

但它不工作。我希望来自Web服务的json响应将被存储在结果中,然后我将找出解析它的方法,可能是通过对它进行反编译。虽然有很多关于它的文献(json,simplejson,HttpPequest),但它必须非常简单,我还没有设法做到这一点。任何解决方案

回答

3

为什么不是你正在使用的requests library

payload = {'key1': 'value1', 'key2': 'value2'} 
>>> r = requests.post("http://www.example.com/webservice", data=payload) 
>>> print r.text 

其中有效载荷是要传递的参数。

希望这会给你一个想法

+0

我认为这是很有启发。非常感谢你。我会尝试! – geompalik

+0

@Jon Clements,我尝试过,但还没有达到目标。我在shell中尝试了这个。在'print r.text'中执行请求之后,它会返回一个链接并且没有数据,这与我在浏览器中放置url时看到的链接完全相同。从这我假定该服务没有发回任何数据? 我也在r = requests.post(url,data = json.dumps(有效内容),headers = header中使用headers = {“Content-type”:“application/json”,“encoding”:“utf-头)。对此有何评论?我也试着找到另一个可用于网络的api来测试我的代码。你有什么想法? – geompalik

+0

好吧,我做到了。我再次打电话给该服务,但是这次是在第一次通话中返回的网址,并且工作正常。非常感谢您的建议。 – geompalik

1

您可以使用此代码和一些错误处理的想法:

payload = {'key1': 'value1', 'key2': 'value2'} 
    url = "http://www.example.com/webservice" 

    try: 
     response = requests.post(url, data=payload) 

    except requests.exceptions.ConnectionError: 
     message = 'This is not the domain we are looking for. URL is: %s' % url 
     print e 
     sys.exit(1) 

    except requests.exceptions.ConnectTimeout: 
     message = 'Too slow connection! URL is: %s' % url 
     print e 
     sys.exit(1) 

    except Exception as e: 
     message = 'Unknown Error: %(message)s URL is: %(url)s' % {'message': str(e), 'url': url} 
     print e 
     sys.exit(1) 

    else: 
     return response.json()