-------------------使用腾讯人脸核身,为什么提示400错误呢-----------

雄牛 2018-01-14 08:24:51
服务已开通的,也是按文档来的,但为什么提示服务器400错误呢?
用的是C#进行的web浏览器打开测试,
但是为什么返回"远程服务器返回错误: (400) 错误的请求"错误呢,信息应该是没有错的.

参考文档链接:
https://cloud.tencent.com/document/product/460/8171?_ga=1.144850102.309154471.1515572675





string secret_id = "****";
string secret_key = "****";

/// <summary>
/// 消息抽样加密算法
/// </summary>
/// <param name="text"></param>
/// <param name="key"></param>
/// <returns></returns>
public static string HmacSha1Sign(string text, string key)
{
Encoding encode = Encoding.GetEncoding("utf-8");
byte[] byteData = encode.GetBytes(text);
byte[] byteKey = encode.GetBytes(key);
HMACSHA1 hmac = new HMACSHA1(byteKey);
CryptoStream cs = new CryptoStream(Stream.Null, hmac, CryptoStreamMode.Write);
cs.Write(byteData, 0, byteData.Length);
cs.Close();
return Convert.ToBase64String(hmac.Hash);
}

/// <summary>
/// Base64加密
/// </summary>
/// <param name="encode">加密采用的编码方式</param>
/// <param name="source">待加密的明文</param>
/// <returns></returns>
public static string EncodeBase64(Encoding encode, string source)
{
string enString = "";
byte[] bytes = encode.GetBytes(source);
try
{
enString = Convert.ToBase64String(bytes);
}
catch
{
enString = source;
}
return enString;
}

/// <summary>
/// Base64加密,采用utf8编码方式加密
/// </summary>
/// <param name="source">待加密的明文</param>
/// <returns>加密后的字符串</returns>
public static string EncodeBase64(string source)
{
return EncodeBase64(Encoding.UTF8, source);
}



/// <summary>
/// 拼接原文
/// </summary>
/// <returns></returns>
private string signStr()
{
/*
a 开发者的项目ID,接入万象优图创建空间时系统生成的唯一标示项目的项目ID
b 图片空间(存储桶)名称
k 项目的 Secret ID
e 签名的有效期,是一个符合 UNIX Epoch 时间戳规范的数值,单位为秒;单次签名时,e 必须设置为 0
t 当前时间戳,是一个符合 UNIX Epoch 时间戳规范的数值,单位为秒,多次签名时,e 应大于 t
r 随机串,无符号 10 进制整数,用户需自行生成,最长10 位
u 历史遗留字段,请填 ‘0’
f 资源存储的唯一标识,单次签名必填;多次签名选填,如填写则会验证与当前操作的文件路径是否一致。
*/
string appid = "1234567890";
string bucket = "tencentyun";
//string secret_id = "****";
//string secret_key = "****";
long expired = GetTimeStampTen() + 2592000;
string onceExpired = "0";
long current = GetTimeStampTen();
string rdm = rand(10);
string userid = "0";
string fileid = "";
//不绑定资源
string returnStr = "a=[" + appid + "]&b=[" + bucket + "]&k=[" + secret_id + "]&e=[" + Convert.ToString(expired) + "]&t=[" + Convert.ToString(current) + "]&r=[" + rdm + "]&u=[" + userid + "]&f=[" + fileid + "]";
return returnStr;

}

/// <summary>
/// 取得按规则取得的签名
/// </summary>
/// <returns></returns>
private string EntrySign()
{
try
{
string hmacStr = HmacSha1Sign(signStr(), secret_key);
string base64Str = EncodeBase64(hmacStr);
return base64Str;
}
catch (System.Exception ex)
{
return "";
}

}

protected void Button1_Click(object sender, EventArgs e)
{

System.Net.WebClient webClient = new System.Net.WebClient();
System.Collections.Specialized.NameValueCollection PostVars = new System.Collections.Specialized.NameValueCollection();
PostVars.Add("appid", "1234567890");//appid
PostVars.Add("idcard_number", "666666666666666666");//身份证号
PostVars.Add("idcard_name", "老王");//姓名
PostVars.Add("url", "http://www.xxxxxxxx.com/id1.jpg");//身份证图片
PostVars.Add("session_id", "123456789000");

webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
webClient.Headers.Add("Authorization", EntrySign());
try
{
byte[] byRemoteInfo = webClient.UploadValues("http://service.image.myqcloud.com/face/idcardcompare", "POST", PostVars);
//下面都没用啦,就上面一句话就可以了
string sRemoteInfo = System.Text.Encoding.Default.GetString(byRemoteInfo);
//这是获取返回信息
TextBox1.Text += sRemoteInfo;
}
catch (System.Exception ex)
{
Response.Write(ex.ToString());
}

}

...全文
352 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧