curl 的設定選項裡面
CURLOPT_COOKIEJAR:用來設定要將 cookie 存放在那個檔案。
CURLOPT_COOKIEFILE:要從哪個檔案讀取 cookie,再傳送出去。
範例:
curl 儲存、傳送 cookie 的程式
<?php $ch = curl_init(); $cookie_txt = dirname(__FILE__) . "/cookie.txt"; curl_setopt($ch,CURLOPT_URL,"http://www.example.com/count.php"); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_txt); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_txt); curl_setopt($ch,CURLOPT_HEADER,0); $out = curl_exec($ch); curl_close($ch);
遠端會使用到 cookie 的網頁(http://www.example.com/count.php)
<?php if(!isset($_COOKIE['count'])){ setcookie("count", 1); }else{ setcookie("count", $_COOKIE['count']+1); } var_dump($_COOKIE);
其他說明:
用來存放 cookie 內容的檔案,建議使用絕對路徑,避免找不到。
https://php.net/manual/en/function.curl-setopt.php#75525 這裡雖然說 windows 系統下,要用絕對路徑才能用。但我測試的結果,用相對路徑也可以,只是檔案似乎會儲存在 Apache 的 ServerRoot 路徑底下。
想請問一下 我在開啟網頁的時候擷取封包 瀏覽器是使用get的方式 去要求網站內容跟cookie 那我在使用curl的時候也是要用get的方式嗎?
回覆刪除如果您的意思是要用curl訪問一個原本是GET的網頁,那建議就用GET,因為不確定對方是怎麼處理GET和POST的資料。
刪除不好意思 我對Php算是初學者 但畢業專題需要解決的問題比較複雜 想說能不能請您給我facebook id 這樣我比較能把我的問題較詳細的描述和請教您 方便的話 blackchocolate8286@yahoo.com.tw這是我的信箱 再麻煩您跟我說一下 謝謝~ ^^
回覆刪除相關的問題,比較建議直接回覆在這裡。如果不方便,可以mail給我xyz@cinc.biz,不過我不確定會 :)
刪除恩恩 那我直接在這邊提問 我是要用CURL達到開啟網頁並傳送資料給他計算 再取回計算完的值 這部分是一個PHP程式 資料的部分是用HTML網頁跟使用者取值 再用AJAX POST到PHP程式 PHP程式部分大致上跟你的範例差不多 只多了設置header跟接收post過來的資料 還是有錯誤 不知道是什麼部分出了問題?
回覆刪除您是指有三個部份?
刪除一個前端HTML網頁(A)、一個PHP程式(B)、一個計算的網頁(C) ?
以下我用A、B、C分別表示這三個。
使用者在A輸入資料 --(AJAX傳輸)--> B --(curl request)--> C(計算後,回應結算結果),
以上是正確的流程嗎? 如果是,我有兩個問題
1.出現錯誤訊息是發生在哪一段,訊息內容是?
2.C跟A是不同網域、其他地方的網頁? 因為中間插一個B使用curl,類似當proxy的角色,所以我這樣猜。
恩恩 這個流程是對的 1.錯誤訊息是ajax的error function發出的 是0 我有測試過 資料是有成功傳到B 但B的執行好像有發生錯誤 2.沒錯 A是我自己寫的網頁 C是別人的 好像在英國
刪除如果確定 A-->B 沒問題。
刪除可以直接用瀏覽器瀏覽 B,看 B-->C 的結果,直接看 C 的回應是什麼,或是出現什麼錯誤。
一般用 curl 抓別人網頁的輸出結果,常遇到的狀況就是模擬的不夠徹底,如果對方有針對這方面檢查的話。
另一種狀況,則是模擬的條件都符合了,但程式執行頻率太高,被擋了。
我單獨測試php的部份成功了 有跑出frax的網站 但是一跟網頁接上就沒辦法傳直過去 會部會是資料格式的問題?
刪除我解決上面的問題了~ 現在有抓到他的html了 但是他好像有防止機器人丟封包的限制 有辦法解決這個限制嗎?
刪除如果對方是用header或post、get...等資料判斷的話,只能測試對方是怎麼防的,然後模擬的一模一樣。
刪除如果對方是防同一個 IP 不能太頻繁訪問的話,目前我想到的方法有
1.延長訪問的時間間隔
2.如果你有多個IP,也可以讓 server 輪替使用不同 IP
3.找網路上有沒有可以用的 proxy ,B 改成去訪問 proxy,然後輪替使用不同的 proxy
補充說明,如果 B 要通過其他 proxy 間接訪問 C,curl_setopt() 有 CURLOPT_PROXY 相關的 proxy 參數可設定
刪除