2016-11-24 149 views
1

我是MIT App Inventor的新手,能夠通過UI功能工作,但不太清楚如何從Web組件發出SOAP樣式的發佈請求。爲MIT App Inventor構建SOAP風格的發佈請求XML?

我能夠用Python 2.7版做到這一點,這裏是代碼:

#!/usr/bin/env python 
# encoding: utf-8 

import requests 

## Remeber: Way too many people accessing this server error may occur if any other instance is opened 

request = u"""<?xml version='1.0' encoding='utf-8'?> 
     <SOAP-ENV:Envelope xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://localhost/HTSI_Pages/HTSI_DataService" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
     <SOAP-ENV:Body> 
     <writeString xmlns="http://localhost/HTSI_Pages/HTSI_DataService"> 
     <tagStr>MASTER.STATEMASTER</tagStr> 
     <entryStr>ReadyAllManagers</entryStr> 
     <typeStr>String</typeStr></writeString></SOAP-ENV:Body> 
     </SOAP-ENV:Envelope>""" 

encoded_request = request.encode('utf-8') 

headers = {"Host": "10.216.224.30", 
      "Content-Type": "text/xml; charset=UTF-8", 
      "Content-Length": len(encoded_request)} 

response = requests.post(url="http://10.216.224.30/HTSI_Pages/HTSI_DataService.asmx", 
         headers = headers, 
         data = encoded_request, 
         verify=False) 

print unicode(response.text) 

有了一點谷歌搜索我能找到@Taifun's夢幻般的回答,顯示如果我要使它可能是我最好的工作打賭是在web.request標題下以列表的形式構建XML。

所以,我在這一點上不知道在何處以及如何我可以編碼爲UTF-8格式的請求,並設定主機/字符集等。(正如我所說的,小白@應用發明)

PS:因爲它是一臺響應這個請求的實際機器,所以我限制自己嘗試所有可能的選項組合以最終找出答案,儘管這是我通常的首要考慮(機器中的服務器位於嵌入式PLC ,不是由我寫的,所以我不知道它將如何對不同的組合作出反應。)

因此,任何幫助設計App Inventor中的此請求將不勝感激。

更新:我按照步驟到達了這個街區。 點擊按鈕我現在收到錯誤Error 1103: unable to post or put text。隨後是uriencoded xml。

屏幕不夠大,看不到完整的錯誤,但一些使用Google提示這可能是由於防火牆/網絡。你有什麼建議?

Update:

更新2:所以我設置屏幕滾動,刪除\ N,字符集和分號,把開放的XML編碼的長度,並運行它反對PostText以及PostTextWithEncoding

他們都沒有提出事件GotText,我想因爲標籤文本沒有被設置,但我得到了某種彈出消息的錯誤。附圖。

Update:2

+0

我已經將相關塊@Taifun的原始問題添加了更新。感謝您關注此事。 – S4nd33p

+0

好吧,在這些工作,並會回覆一下。另一件事......在構建XML時,是否應該使用\ n來格式化爲換行符,還是應該將其從我用作存儲庫的文本文件複製粘貼後的方式保留。注意:在文本文件中,我使用通常的新行格式化方式創建了xml內容。 – S4nd33p

+0

嘗試了這些步驟,並更新了問題,但它仍然不存在,順便說一句,我不能感謝你在這個@Taifan上與我密切關注。 – S4nd33p

回答

1

一些技巧

  • 你可能想看看另一個例子,how to set the request headers和你的情況使用PostText方法來發表您的要求。要編碼請求,請使用UriEncode方法。
  • 不使用\n

  • 要獲得完整的錯誤消息,在屏幕設置爲滾動= TRUE,並在標籤顯示的結果。確保將Web.SaveResponse設置爲false,並使用Web.GotText事件接收結果。您可以嘗試text/xml作爲Content-Type(刪除分號和字符集部分)。預期的字符串是否爲StrXml?使用做它找出來,又見提示4此處Top 5 Tips: How to learn App Inventor

  • 目前從Screen.ErrorOccurred事件顯示的錯誤,你也可以有添加標籤,以顯示在屏幕上的錯誤。要使用PostTextWithEncoding方法是一個好主意。刪除UriEncode塊,可能是這個問題。您也可以刪除XML字符串中的所有這些不必要的空格...