一直想使用C#的System.Net.Http实现以下Python的功能,可惜能力有限,一直报错。
Python代码
import base64
import datetime
import hashlib
import hmac
import urllib
import uuid
import requests
AccessKeyId = "XXXXXXXXXXXXXXXXXXXXX"
AccessKeySecret = "WWWWWWWWWWWWWWWWWWW"
url = "http://alinlp.cn-hangzhou.aliyuncs.com/"
# 自然语言分析
def nlpTest(text):
param = {
"Format": "json",
"Version": "2020-06-29",
"AccessKeyId": AccessKeyId,
"SignatureMethod": "HMAC-SHA1",
"Timestamp": (datetime.datetime.now() - datetime.timedelta(hours=8)).strftime("%Y-%m-%dT%H:%M:%SZ"),
"SignatureVersion": "1.0",
"SignatureNonce": uuid.uuid4().hex,
"Text": text,
"TokenizerId": "MAINSE",
"Action": "GetSaChGeneral",
"ServiceCode": "alinlp"
}
# 对参数按照key进行排序
param_list = sorted(param.items(), key=lambda x: x[0])
# 将key-value转化为url的形式
StringToSign = urllib.parse.urlencode(param_list)
# 做urlencode
StringToSign = urllib.parse.quote(StringToSign)
# 拼接头
StringToSign = "GET&%2F&" + StringToSign
# 拼接SHA1对应的key
secret = AccessKeySecret + "&"
# 计算SHA1值,并做base64
sig = base64.b64encode(hmac.new(secret.encode("utf-8"), StringToSign.encode("utf-8"), hashlib.sha1).digest())
# 将Signature添加到参数中
param["Signature"] = bytes.decode(sig)
# 发送http请求
reponse = requests.get(url, param)
return reponse.text
if __name__ == '__main__':
data = nlpTest("周杰伦唱歌真好听!")
print(data)
请帮忙基于C#的System.Net.Http实现一下,谢谢!