
สืบเนื่องจากผมประสบปัญหาการใช้งาน fsockopen ที่เคย Connect ไปหา Server ที่เป็น Apache แต่ ณ.บัดนาว ต้องใช้งาน fsockopen Connect ไปหา Server ที่เป็น Tomcat ความบรรลัยจึงบังเกิด …
โดยปกติแล้วนั้น เมื่อ ใช้งาน fsockopen Connect ไปหา Server ที่เป็น Apache นั้น มันจะต้ด Header ด้วย \r\n ดังนี้..
$ctrlf = "\r\n";
$header = "POST / HTTP/1.0".$ctrlf;
$header .= "Content-type: application/x-www-form-urlencoded".$ctrlf;
$header .= "Content-Length: ".$contentlength.$ctrlf;
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if ($fp){
fwrite($fp,$header.$ctrlf);
while (!feof($fp)) {
$tmp = fgets($fp, 200);
$response .= $tmp;
}
} else {
$response = "Connection failed : ".$errstr."(".$errno.")<br />\n";
}
แต่่ด้วย Code เดียวกันนี้ ถ้า ใช้งาน fsockopen ไปหา Server ที่เป็็น Tomcat นั้น Server จะ Close Connection ไปเลย เนื่องจาก
ถ้าใช้งาน fsockopen ไปหา Server ที่เป็น Tomcat นั้น จะตัด Header ด้วย \n ตัวเดียวเท่านั้น..(ทำไมไม่เสือกทำให้เหมือนกันวะ!!)
Code ด้านบน จึงใช้งานเชื่อมต่อไปหา Server ที่เป็น Tomcat ไม่ได้ สาดด!!
เพราะฉะนั้นถ้าจะใช้งาน fsockopen ไปหา Server ที่เป็น Tomcat เราจึงต้องเปลี่ยนการตัด Header จาก \r\n เป็น \n ดังนี้
$ctrlf = "\n";
หรือมีอีก 1 วิธี คือใช้งาน cURL ไปซะเลย ซึ่งวิธีนี้จะ Post ไปได้ทั้ง Server ที่เป็น Apache และ Tomcat ครับ ดังนี้
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "example.com");
curl_setopt($ch, CURLOPT_HTTPHEADER,array("Content-type: application/x-www-form-urlencoded"));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "params=yourparameter");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
curl_close($ch);

noinarak on September 25, 2009
งืมๆ…
rukawa on September 25, 2009
เมพ ข่า ข่า
i-mard on September 25, 2009
คิดว่ารู้คนเดียวไงวะ
i-keng on September 25, 2009
ไอ้ฟาย 55555
ก็เพราะไอ้เรื่องพวกนี้แหละ ที่ทำให้กุมีตังกินเหล้าอะ 5555
Eartheration on September 25, 2009
cURL is the best solutions
ijerry on September 25, 2009
สมกับเป็นเวบราคา สองแสนสี่ จริงๆ
vittee on December 21, 2009
ปกติ ก็ใช้ \n อยู่แล้วนี่นา เพราะ \r\n นะ มัน Windows Only