跳到主要內容

[PHP] 用 curl 來抓網路上的資料(四)

前面三篇我大概把一般會用到的基本 curl 介紹完了, 接下來我們會
介紹一些比較特殊的功能, 首先我要示範如果你的 瀏覽器是透過
proxy 來存取Internet 網頁的話, 如何用 curl 來達到同樣的效果呢?
PHP 4.x 版和 5.x 版的用法不太一樣, 由於我使用的環境是 4.3.9 因此
我只介紹 4.x 版的用法, 其實 5.x 版也可以用等下我介紹的方法, 只是
5.x 提供了更方便的方法讓使用者容易使用

以下假設我們透過 proxy.hinet.net port:3128 來連上我們的目的地
http://www.test.com.tw/testpage.html

1. 如果 proxy 不需密碼:
$ch = curl_init("http://www.test.com.tw/testpage.html");
curl_setopt($ch, CURLOPT_PROXY, "http://proxy.hinet.net:3128");
curl_exec($ch);
即可, 其中 curl_setopt 即是設定我們的程式要透過 proxy 去存取
我們的目的地網站

2. 如果 proxy 需要密碼:
$ch = curl_init("http://www.test.com.tw/testpage.html");
curl_setopt($ch, CURLOPT_PROXY, "http://proxy.hinet.net:3128");
curl_setopt($ch, CURLOPT_PROXYUSERPWD, "user:password");
curl_exec($ch);
即可, 其中 第二個 curl_setopt 即是設定我們的程式要透過 proxy 去存取
我們的目的地網站所需的帳號(user)及密碼(password), 如果帳號密碼
沒錯應該就可以透過 proxy 存取了

留言

這個網誌中的熱門文章

用 NotebookLM AI 打造 Pikmin 蘑菇重生計算機

有玩《Pikmin Bloom》的玩家都知道,遊戲中的大蘑菇(例如「一般 神秘蘑菇」或「一般 紅色蘑菇」)被推毀後需要一段時間才會重生 。為了精準掌握下一次搶菇的時機,我決定透過 NotebookLM 的協助, 動手寫一個小工具:只要上傳包含挑戰剩餘時間(如「剩下20 分 47 秒」或「剩下1 小時 1 分 58 秒」)的遊戲截圖 ,系統就能自動推算出精確到秒的重生時間。 一開始我只上傳了一張 Pikmin 打菇的截圖, AI 就根據我的要求自動根據左上角的系統時間與圖中剩餘時間等資訊, 告訴我要安裝相關 OCR 套件, 並開發出第一個版本的程式, 這個程式已經大致完成了我的需求, 但離實用還有一小段距離, 所以在持續改進的開發過程中,我遇到了幾個有趣且經典的技術挑戰(對於這些影線處理, OCR, 圖片 EXIF info 等知識, 我是沒有太多的經驗, 但在 AI 一步一步的引導下完成了我的需求),在此與大家分享:  一、 影像預處理:拯救低迷的 OCR 辨識率 一開始,我直接將遊戲截圖丟給 Tesseract OCR 引擎,但辨識結果慘不忍睹。原因是遊戲畫面背景太過複雜(充滿草地、花朵與蘑菇發光特效) ,且文字是白色的。 為了解決這個問題,AI 引入了 OpenCV 進行影像預處理。先將圖片精準裁切,只保留左下角的血條與時間區域,接著轉為灰階並放大兩倍,最後使用二值化(經過測試閾值 200 得到不錯的效果)並反轉顏色。這個步驟成功將複雜的畫面轉換成 Tesseract 最容易辨識的「白底黑字」,大幅提升了準確率, 但在做更多的不同截圖的測試, 閾值 200 並不能成功轉換成 OCR 能辨識的黑白圖, 因此我請 AI 調整成以 200 為基礎, 如果辨識失敗, 在調整成 210, 190, 220, 180 如果都失敗才判定無法辨識(下圖是調整後的圖形)。  二、 對抗 OCR 的奇妙誤判與高容錯 Regex 解決了影像問題,接著是文字解析。遊戲字體中的無襯線數字「1」非常容易被誤判為英文字母 l、I、直線 |,甚至在辨識「1 小時」時被讀成 ]小時 。 為此,我設計了一套高容錯率的正規表達式 (Regex):(?:([0-9lIi|\]\[]+)\s*小?\s*時\s*)?(?:([0-9lIi|\]\[]+)\s*分\s*)?([0-9lIi...