騰訊雲圖片鑒黃集成到C#

来源:https://www.cnblogs.com/dawenyang/archive/2018/05/10/9019264.html
-Advertisement-
Play Games

官方文檔:https://cloud.tencent.com/document/product/641/12422 請求官方API及簽名的生成代碼如下: ...


官方文檔:https://cloud.tencent.com/document/product/641/12422

請求官方API及簽名的生成代碼如下:

    public class TencentCloundPicHelper
    {
        /// <summary>
        /// 發送Post請求騰訊雲
        /// </summary>
        public string SendPost(string postDataStr)
        {
            var url = @"http://service.image.myqcloud.com/detection/porn_detect";

            try
            {
                System.Net.ServicePointManager.Expect100Continue = false;
                var request = (HttpWebRequest)HttpWebRequest.Create(url);
                
                request.Method = "POST";
                
                SetHeaderValue(request.Headers, "content-type", "application/json");
                SetHeaderValue(request.Headers, "content-length", postDataStr.Length.ToString());
                SetHeaderValue(request.Headers, "Host", "service.image.myqcloud.com");
                SetHeaderValue(request.Headers, "authorization", GetSign());
                var memStream = new MemoryStream();
                
                var jsonByte = Encoding.GetEncoding("utf-8").GetBytes(postDataStr);
                memStream.Write(jsonByte, 0, jsonByte.Length);

                request.ContentLength = memStream.Length;
                var requestStream = request.GetRequestStream();
                memStream.Position = 0;
                var tempBuffer = new byte[memStream.Length];
                memStream.Read(tempBuffer, 0, tempBuffer.Length);
                memStream.Close();

                requestStream.Write(tempBuffer, 0, tempBuffer.Length);
                requestStream.Close();

                var response = request.GetResponse();
                using (var s = response.GetResponseStream())
                {
                    var reader = new StreamReader(s, Encoding.UTF8);
                    return reader.ReadToEnd();
                }
            }
            catch (WebException we)
            {
                if (we.Status == WebExceptionStatus.ProtocolError)
                {
                    using (var s = we.Response.GetResponseStream())
                    {
                        var reader = new StreamReader(s, Encoding.UTF8);
                        return reader.ReadToEnd();
                    }
                }
                else
                {
                    throw we;
                }
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        /// <summary>
        /// 獲取簽名
        /// </summary>
        public static string GetSign()
        {
            var appId = ConfigurationManager.AppSettings["AppId"];//開發者的 APPID,接入智能圖像時由系統生成
            var bucket = "tengxunyun";//Bucket,空間名稱,即圖片資源的組織管理單元
            var secretId = ConfigurationManager.AppSettings["SecretId"];//Secret ID
            var secretKey = ConfigurationManager.AppSettings["SecretKey"];//secretKey
            var ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
            var currentTime = Convert.ToInt64(ts.TotalSeconds);//當前時間戳,是一個符合 UNIX Epoch 時間戳規範的數值,單位為秒,多次簽名時,e 應大於 t
            var expiredTime = Convert.ToInt64((DateTime.UtcNow.AddMinutes(180) - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds);//簽名的有效期,是一個符合 UNIX Epoch 時間戳規範的數值,單位為秒;單次簽名時,e 必須設置為 0
            var rand = GetRandom();//隨機串,無符號 10 進位整數,用戶需自行生成,最長 10 位
            var userid = 0;//歷史遺留欄位,請填寫為 0
            var fileid = "";//資源存儲的唯一標識,單次簽名必填;多次簽名選填,如填寫則會驗證與當前操作的文件路徑是否一致。
            var encryptText = $"a={appId}&b={bucket}&k={secretId}&e={expiredTime}&t={currentTime}&r={rand}&u=0&f=";
            var sign = Hmacsha1Encrypt(encryptText, secretKey);

            return sign;
        }

        /// <summary>
        /// 設置Http post請求頭
        /// </summary>
        public static void SetHeaderValue(WebHeaderCollection header, string name, string value)
        {
            var property = typeof(WebHeaderCollection).GetProperty("InnerCollection", BindingFlags.Instance | BindingFlags.NonPublic);
            if (property != null)
            {
                var collection = property.GetValue(header, null) as NameValueCollection;
                collection[name] = value;
            }
        }

        /// <summary>
        /// HMACSHA1演算法加密
        /// </summary>
        private static string Hmacsha1Encrypt(string encryptText, string encryptKey)
        {
            using (HMACSHA1 mac = new HMACSHA1(Encoding.UTF8.GetBytes(encryptKey)))
            {
                var hash = mac.ComputeHash(Encoding.UTF8.GetBytes(encryptText));
                var pText = Encoding.UTF8.GetBytes(encryptText);
                var all = new byte[hash.Length + pText.Length];
                Array.Copy(hash, 0, all, 0, hash.Length);
                Array.Copy(pText, 0, all, hash.Length, pText.Length);
                return Convert.ToBase64String(all);
            }
        }

        /// <summary>
        /// 獲取隨機數
        /// </summary>
        private static int GetRandom()
        {
            var random = new Random();
            var rand = random.Next(10000, 999999999);
            return rand;
        }
    }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Ctrl+E,D: 格式化全部代碼 Ctrl+E,C / Ctrl+K,C: 註釋選定內容 Ctrl+E,U / Ctrl+K,U: 取消選定註釋內容 Ctrl+E,S: 查看空白 Ctrl+E,W: 自動換行 CTRL + SHIFT + B生成解決方案 CTRL + F7 生成編譯 CTRL + ...
  • NumberValidators是一個用於驗證中國大陸證件、號碼是否符合國家標準的類庫,因為該類庫在昨日已經正式發佈1.0.0版本至nuget,所以在此介紹下該類庫的具體功能。 NumberValidators的github地址為:https://github.com/fdstar/NumberVa ...
  • 對於ASP.NET Core開發,不管是MVC,還是Web API,Taurus.MVC 為你提供另一種開發選擇,正式發佈,應該在下周。 ...
  • using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;using System.IO; ...
  • 1.C#連接連接Access 2.C#連接SQL Server 3.C#連接Oracle 4.C#連接MySQL 5.C#連接IBM DB2 6.C#連接SyBase 7.C#連接FireBird 8.C#連接Interbase ...
  • .net自定義錯誤頁面實現:其一、通過節點system.web新增customErrors配置節點實現、其二、通過節點system.webServer新增httpErrors配置節點實現 ...
  • 近期接手一個winform 項目,雖然之前有.net 的經驗,但是對一些控制項的用法還不是很熟悉。 這段時間將會記錄一些在工作中遇到的坎坷以及對應的解決辦法,寫出來與大家分享並希望大神提出更好解決方法來促進進步。 我也會儘可能把我查找到資料的出處引出來,以此來感恩對我提供幫助的人們。 正題如下 一、關 ...
  • .net捕捉全局未處理異常的3種方式:方式一、Page_Error處理頁面級未處理異常、方式二、通過HttpModule來捕獲未處理的異常、方式三、通過Global中捕獲未處理的異常 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...