發表文章

目前顯示的是 2023的文章

Windows 上IIS 匯入SSL憑證時,出現"指定的網路密碼錯誤"訊息(.pfx)

公司使用的伺服器SSL都是向TWCA購買。 以往自TWCA下載的憑證,包含server.cer與 server.key,經過 OpenSSL 轉換成.pfx後,就可以匯入到IIS使用。  從 https://slproweb.com/products/Win32OpenSSL.html下載執行檔安裝後,選擇裝在 C:\Program Files\OpenSSL-Win64\bin 下,再以指令執行轉換。 在程式目錄下輸入 openssl version,則可以查看 openssl的版本。 但如果憑證要裝在Server 2016/2019以上版本的Windows Server,會認為openssl的預設轉換加密演算法不夠安全,導致在匯入pfx時產生"指定的網路密碼錯誤"訊息。看起來是製作pfx時輸入密碼的問題,但其實一點關係也沒有......也有文章說要將openssl 改裝回舊版本,但這是不對的。 此時,請依照以下方式轉換憑證檔案(指令內的資料夾名稱請自行修改為實際內容)。  --2023版本 openssl pkcs12 -macalg SHA1 -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES  -export -out d:\ssl_2023\ aloha2023.pfx -inkey d:\ssl_2023\ server.key -in d:\ssl_2023\ server.cer -certfile d:\ssl_2023\ uca.cer --以前能夠正常執行的版本 openssl pkcs12 -export -out d:\ssl_2022\QQQserver2022.pfx -inkey d:\ssl_2022\server.key -in d:\ssl_2022\server.cer -certfile d:\ssl_2022\uca.cer

C# 非同步程式抓取資料的開發技巧(async, wait, web crawler)

最近有個side project的需求,是需要利用爬蟲去抓取國內外官方機構的Meta data後設資料,對現有的資料做補充。但這些抓取資料的來源格式差異很大,而且刻出來的程式是希望可以打包給不太懂電腦的使用者,執行幾千筆資料的抓取與更新,因此使用python+爬蟲的solution就不太適用。最後,決定用 c# 寫windows form。 但由於抓資料的來源不是後端資料庫而是前端網站,爬資料的時候可能會遇到連線中斷、網路速度遲緩等各種情形,若是幾千筆跑下來,在程式執行完畢前不僅程式會有凍結的情形發生,使用者也會抱怨非常緩慢。所以在開發上選擇使用非同步的寫法。 設計上針對XML、HTML、JSON三種資料來源轉寫三個解析器,以下有幾個設計過程中的心得: 使用 HttpClient而非古早時代的WebRequest寫法抓取資料( 相容.NET Core )。 為查詢請求加上瀏覽器header(實際測試,空的請求會被視為機器人而遭拒絕)。 解析的設定(如 xml的節點、Xpath等)另外寫在設定檔中,提高修改程式的彈性。 為每段請求加上一定的delay,以免被視為濫用或過度存取。 為了解析網站資料,用到HtmlAgilityPack套件。另外也需要regexp來解析標籤資料。 實作程式時要加上存取修飾詞 async ,回傳值必須用Task<T>包起來(T是指你的程式想要的型別)。 public async Task< SearchResultData > getDataFromJson (string Oid, string keyword, SearchSetting policy, bool interactive) {     // ....你的查詢邏輯      return SearchResultData; } 呼叫時,在程式之前加上  await  , 告訴程式 必須等待回傳值。 List<SearchResultData> metaList = new List<SearchResultData>();  if (policy.Media == "html") {      metaList.Add(...