2014-01-13 49 views
2

我不知道如果我要在這裏發佈,但我想使用Python來請求給Mouser的車API和皁液庫Mouser的車API請求

def updateCart(): 
url = "https://mews.mouser.com/cartservice.asmx?op=UpdateCart&wsdl" 
client = Client(url) 
xmlns = Attribute("xmlns", "http://tempuri.org/XMLSchema.xsd") 
xmlnsXSD = Attribute("xmlns:xsd", "http://www.w3.org/2001/XMLSchema") 
xmlnsXSI = Attribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance") 
cartGUID = Attribute("CartGUID", "") 
requestor = Attribute("Requestor", "richeve") 

cartMessage = Element("CartMessage") \ 
    .append(xmlns) \ 
    .append(xmlnsXSD) \ 
    .append(xmlnsXSI) \ 
    .append(cartGUID)\ 
    .append(requestor) 

partNumber = Attribute("MouserPartNumber", "941-CCS050M12CM2") 
quantity = Attribute("Quantity", "5") 
cartItem = Element("CartItem").append(partNumber).append(quantity) 

cartMessage.append(cartItem) 

xmlCartMessage = Element("xmlCartMessage").append(cartMessage) 

result = client.service.UpdateCart(xmlCartMessage) 
print result 
print client 
return True 

的這個問題是我總是讓手術超時。我不知道他們的API或服務器是否發生故障。或者我在我的代碼中缺少一些東西。

回答

2

我剛剛與python < - > Mouser推出的API戰鬥並贏得今天的勝利。這是我學到的東西。

  1. 超時是由WSDL底部的錯誤端點引起的。它指定了9001端口,但沒有聽到那裏。覆蓋泡沫客戶端位置以刪除端口規範使其工作。

    url = 'https://mews.mouser.com/cartservice.asmx?WSDL' 
    location = 'https://mews.mouser.com/cartservice.asmx' 
    client = Client(url, location=location, cache=None) 
    
  2. client.service.UpdateCart()想要一個 XML文檔。這是對我工作:

    xmlCartMessage = Document() 
    xmlCartMessage.append(cartMessage) 
    result = client.service.UpdateCart(xmlCartMessage.plain()) 
    
  3. 在Mouser的反應也是文本的一個suds.sax.text.Text XML片段。有關此行爲的說明,請參見https://lists.fedoraproject.org/pipermail/suds/2011-October/001537.html。我使用https://github.com/martinblech/xmltodict將其轉換爲字典。

    import xmltodict 
    d = xmltodict.parse(result)