某陌習慣調用ASMX文件,開發語言最近比較常用C#
結果這次合作的同事習慣用Python,還強調只會用REST風格的WebService
某陌心想這不是WebAPI嗎?趕緊學習……
正式引入WebAPI之前先簡單說明一下 RESTful 风格的地址
示例(和我之前常用的.asmx文件略有不同,不以.asmx結尾):
https://blog.csdn.net/sinat_28782331
SoapUI執行效果就是某陌博客的主頁。
不過這個也不影響啦~沒必要一定讓python開發的API轉化成ASMX格式,SQL其實也是可以調用這種網址的,就算放在Anaconda 上的 WebService 也是不受影響的。
這里簡單寫了一個Demo:
Python代碼如下
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/loginurl', methods=['GET', 'POST'])
def login():
# 利用request取得使用者端傳來的方法為何
if request.method == 'POST':
# 利用request取得表單欄位值
return 'Hello ' + request.values['username']
# 非POST的時候就會回傳一個空白的模板
return render_template('login.html')
if __name__ == '__main__':
app.debug = True
app.run()
login.html代碼如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello Page</title>
</head>
<body>
<form method='post' action={{ url_for('login') }}>
<p>
<input type='text' name='username' />
</p>
<p>
<button type='submit'>Submit</button>
</p>
</form>
</body>
</html>
由上可知:GET返回的是默認的login.html
Declare @Object as Int
Declare @ResponseText as nvarchar(4000)
Declare @ServiceUrl varchar(max)='http://10.4.97.211:82/loginurl' --url自定義
EXEC sp_OACreate 'MSXML2.XMLHTTP', @Object OUT; --創建OLE元件物件
Exec sp_OAMethod @Object, 'open', NULL, 'get',@ServiceUrl,'false' --打開連結,注意是get還是post
EXEC sys.sp_OAMethod @object,'setRequestHeader',NULL,'Content-Type','application/x-www-form-urlencoded;charset=UTF-8'
Exec sp_OAMethod @Object, 'send',NULL
EXEC sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT --輸出參數
Select @ResponseText --輸出結果
Exec sp_OADestroy @Object
返回結果:
# 非POST的時候就會回傳一個空白的模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello Page</title>
</head>
<body>
<form method='post' action=/loginurl>
<p>
<input type='text' name='username' />
</p>
<p>
<button type='submit'>Submit</button>
</p>
</form>
</body>
</html>
POST返回 hello + username
Declare @Object as Int
Declare @ResponseText as nvarchar(4000)
Declare @ServiceUrl varchar(max)='http://10.4.97.211:82/loginurl' --url自定義
Declare @RequestText as varchar(8000);
set @RequestText='username=123' --此處值參如果有多個,用&分隔,例 username=123&password=123
EXEC sp_OACreate 'MSXML2.XMLHTTP.3.0', @Object OUT; --創建OLE元件物件
Exec sp_OAMethod @Object, 'open', NULL, 'POST',@ServiceUrl,'false' --打開連結,注意是get還是post
EXEC sys.sp_OAMethod @object,'setRequestHeader',NULL,'Content-Type','application/x-www-form-urlencoded'
--EXEC sp_OAMethod @object, 'setRequestHeader', null, 'SOAPAction', 'login'
Exec sp_OAMethod @Object, 'send',NULL,@RequestText
EXEC sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT --輸出參數
--EXEC SP_OAGETERRORINFO @OBJECT
Select @ResponseText --輸出結果
Exec sp_OADestroy @Object
返回結果:Hello 123
參考資料: