2013-01-11 83 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()