2009年6月29日 星期一

fsockopen穿越proxy-以台灣簡訊為例

fsocjopen 可以跟伺服器主機連線,只要知道IP、port 就好,但容易遇到的問題是,萬一讀取網頁時是靠proxy來達成的時候,那該怎麼做呢?

其實,一樣可以用fsockopen,但我們連線到proxy,在直接下指令給proxy即可
下面範例是在作專題時,使用台灣簡訊來發送客製化簡訊,欲到的proxy是中原大學的proxy.cycu.edu.tw port:3128

<?
$username = "xx"; // 帳號
$password = "xx"; // 密碼
$type = "now"; // 發送型態
$mobile = "0988xxxxxx"; // 電話
$message = "簡訊測試喔"; // 簡訊內容
$encoding = "big5"; // 簡訊內容編碼
$popup = ""; // 使用 POPUP 顯示
$mo = ""; // 使用雙向簡訊
$vldtime = "86400"; // 簡訊有效期限
$dlvtime = ""; // 預約時間
$MSGData = "";
$msg =
"username=".$username."&password=".$password."&type=".$type."&encoding=".$encoding."&popup=".$popup."&m
o=".$mo."&mobile=".$mobile."&message=".urlencode($message)."&vldtime=".$vldtime."&dlvtime=".$dlvtime;


$num = strlen($msg);
// 打開 API 閘道
$fp = fsockopen ("proxy.cycu.edu.tw", 3128);
// print_r($fp);
if ($fp) {
$MSGData = $MSGData."POST http://211.78.23.230/send_sms.php HTTP/1.1\r\n";
$MSGData = $MSGData."Host: api.twsms.com\r\n";
$MSGData = $MSGData."Content-Length: ".$num."\r\n";
$MSGData = $MSGData."Content-Type: application/x-www-form-urlencoded\r\n";
$MSGData = $MSGData."Connection: Close\r\n\r\n";
$MSGData = $MSGData.$msg."\r\n";
fputs ($fp, $MSGData);

// 取出回傳值
while (!feof($fp)) $Tmp[]=fgets ($fp,128);

// 關閉閘道
fclose ($fp);

// 顯示回傳值
$Respone = split(":",$Tmp[9]);
// print_r($Tmp);
$Res["Number"] = $Respone[0]; // 傳回碼
$Res["OrderID"] = $Respone[1]; // 如果傳回碼是 00 成功, 才會有 OrderID 產生
// echo '<BR>$Res["Number"] ='.$Res["Number"];
// echo '<BR>$Res["OrderID"] = '.$Res["OrderID"];
}
?>



上面程式碼其中的211.78.23.230 是台灣簡訊的server,要注意的是
這邊要放 http://211.... 也就是絕對路徑!!

此範例由台灣簡訊API提供的範例程式作修改。

沒有留言:

張貼留言

try comments