ใช้ fsockopen ในการเก็บข้อมูลเว็บอย่างไรอ่าครับ

เริ่มโดย xmen256k, 07 ธันวาคม 2008, 01:54:21

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

xmen256k

จากกระทู้
file_get_contents ออกมาแล้วเราจะสามารถหาข้อความที่เราต้องการหายังไงดีครับ
http://www.thaiseoboard.com/index.php?topic=37596.0
อ้างถึงจาที่อ่านๆดูเห็นบอกว่า curl_init() จะเร็วกว่าใช่ป่าวครับ แล้วจะอกมาเป็น html

ที่นี้ผมอยากหา ส่วนส่วนนึงของเวปที่ ผม get มาอะครับ

อย่าง

$url = $websiteown;
$url = file_get_contents($url);
echo $url;

$url = $websiteown;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
curl_close($ch);

echo $response;


สมมุติว่า

ใน html มี

.
.
.

<div id="content">
<img src="http://..........jpg">
</div>
.
.
.

ผมต้องการข้อมูลที่อยู่หลัง <div id="content">  และ ก่อน </div> เท่านั้นครับ

ต้องเขียนยังไงครับผม
ขอบพระคุณครับ 

ไม่ทราบว่า ถ้าจะใช้ fsockopen แทน จะต้องใช้สคริปแบบไหนอ่าครับ

ขอบคุณมากครับ

EThaiZone

หาดูตัวอย่างจากนี้ดูครับ http://th.php.net/fsockopen

ก็แค่รับค่าจาก fgets หรือ fread

:P

xmen256k

อ้างถึงจาก: EThaiZone ใน 07 ธันวาคม 2008, 02:01:31
หาดูตัวอย่างจากนี้ดูครับ http://th.php.net/fsockopen

ก็แค่รับค่าจาก fgets หรือ fread

:P

เอ่อ คือถ้าไม่เป็นการรบกวนขอช่วยโค๊ดไฟล์ตัวอย่างสักหน่อยได้มั๊ยอ่าครับ ลักษณะการทำงานเหมือน จขกท.เลยครับ
ปล.อังกฤษก็ไม่ค่อยจะรู้เรื่องกับเค้าเท่าไหร่อ่าครับ php ก็อยู่ในช่วงเริ่มต้นเท่านั้นอ่าครับ

ขอบคุณครับ

EThaiZone

$url = "http://www.thaiseoboard.com/index.php/topic,45350.0.html";

$u = parse_url($url);
$fp = fsockopen($u['host'], 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET ".$u['path']." HTTP/1.1\r\n";
    $out .= "Host: ".$u['host']."\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        $page .= fgets($fp, 128);
    }
    fclose($fp);
}

preg_match_all('#<b><a[^>]+action=profile[^>]+>([^<]+)</a></b>#', $page , $matches);
print_r($matches[1]);

xmen256k

ขอบคุณมากครับ พอจะได้แนวทางหละครับ ^^ +1ให้เลย

Tee++;

การทำแบบนี้มี Class httpClient เยอะเลยครับ ที่ผมเห็นที่ดีที่สุด คือตัวที่ plug อยู่ใน Libraries ของ Zend Framework

แต่ว่ามันมีวิธีการลงที่ค่นข้างวุ่นวายในส่วนของ การ include path ผมเลยเอาตัวนี้มาแก้ขัดให้แทน

httpClient
http://www.phpclasses.org/browse/package/576.html

หรือถ้าจะเอ าแบบ cURL ก็มีให้เลือก
http://www.phpclasses.org/browse/package/1988.html
http://www.phpclasses.org/browse/package/3547.html

[direct=http://laravel.in.th]Laravel in Thai[/direct]
[direct=http://jquerytips.com]jQueryTips by Tee++;[/direct]
[direct=https://www.facebook.com/jQueryTips]jQueryTips Page[/direct]
[direct=https://www.facebook.com/Laravel.in.th]Laravel in Thai Page[/direct]
[direct=https://twitter.com/Teepluss]Teepluss's Twitter[/direct]


xmen256k

อ้างถึงจาก: Tee++; ใน 08 ธันวาคม 2008, 00:30:45
การทำแบบนี้มี Class httpClient เยอะเลยครับ ที่ผมเห็นที่ดีที่สุด คือตัวที่ plug อยู่ใน Libraries ของ Zend Framework

แต่ว่ามันมีวิธีการลงที่ค่นข้างวุ่นวายในส่วนของ การ include path ผมเลยเอาตัวนี้มาแก้ขัดให้แทน

httpClient
http://www.phpclasses.org/browse/package/576.html

หรือถ้าจะเอ าแบบ cURL ก็มีให้เลือก
http://www.phpclasses.org/browse/package/1988.html
http://www.phpclasses.org/browse/package/3547.html



เอ่อ งงได้ใจเลยผม  ??? ???

EThaiZone

ู^
^
ถ้าจะใช้พวก libraly ที่เขียนในรูป class

แนะนำให้ศึกษาเรื่องการเขียนในรูป OOP ก่อนนะครับ
จะได้ไม่งง

:)

xmen256k

โอ้ว เทพทั้งน้าน
ผมก็คงพื้นฐานต่อไป แหะๆ

Amnaj

แล้วการใช้ fsockopen นี่ มันสามารถส่งค่าผ่านตัวแปลเหมือน curl ได้ป่ะ
แล้วโปรแกรม sniffer ที่ใช้ดู  header อ่ะงับ ใครมีมั่งขอหน่อย หา ใน google ไม่พบใช้ คำค้น  ไม่ตรงงับ

Tee++;

ได้สิครับ ลองไปโหลด ตัว httpClient ด้านบนมาก่อน หรือไม่ก็ เอา Google หาคำว่า php snoopy
[direct=http://laravel.in.th]Laravel in Thai[/direct]
[direct=http://jquerytips.com]jQueryTips by Tee++;[/direct]
[direct=https://www.facebook.com/jQueryTips]jQueryTips Page[/direct]
[direct=https://www.facebook.com/Laravel.in.th]Laravel in Thai Page[/direct]
[direct=https://twitter.com/Teepluss]Teepluss's Twitter[/direct]


Amnaj

อ้างถึงจาก: Tee++; ใน 11 ธันวาคม 2008, 16:04:29
ได้สิครับ ลองไปโหลด ตัว httpClient ด้านบนมาก่อน หรือไม่ก็ เอา Google หาคำว่า php snoopy

พอมีตัวอย่างง่ายให้ดูไหมงับ อย่างเช่นการล็อคอิน เคยใช้แต่ curl ง่ะ
ไปโหลด php snoopy มาแล้ว แต่ เหอะ งง นิดหน่อย

Tee++;

^
^
^
http://snippets.dzone.com/posts/show/2007

<?php
    
require('snoopy.php');
   
    
$snoopy = new Snoopy();
   
    
$url 'http://www.example.com';
   
    
$data['param1'] = 'value1';
    
$data['param2'] = 'value2';
    
$data['param3'] = 'value3';
   
    
$snoopy->submit($url$data);
?>
[direct=http://laravel.in.th]Laravel in Thai[/direct]
[direct=http://jquerytips.com]jQueryTips by Tee++;[/direct]
[direct=https://www.facebook.com/jQueryTips]jQueryTips Page[/direct]
[direct=https://www.facebook.com/Laravel.in.th]Laravel in Thai Page[/direct]
[direct=https://twitter.com/Teepluss]Teepluss's Twitter[/direct]


Amnaj

อ้างถึงจาก: Tee++; ใน 11 ธันวาคม 2008, 17:40:34
^
^
^
http://snippets.dzone.com/posts/show/2007

<?php
    
require('snoopy.php');
   
    
$snoopy = new Snoopy();
   
    
$url 'http://www.example.com';
   
    
$data['param1'] = 'value1';
    
$data['param2'] = 'value2';
    
$data['param3'] = 'value3';
   
    
$snoopy->submit($url$data);
?>


ขอบคุณมากครับ เข้าใจมากแล้วครับ
แต่ค่าเกี่ยวกับ cookies อ่ะงับ มันต้องใช้ตัวแปลจากในเว็บ หรือ เราสร้างขึ้นมาเก็บ
แล้วค่า  cookies หรือ Session มันถูกเก็บไว้ในงับ

ประมาณว่าล็อคอิน แล้ว แต่ถ้าจะไปหน้าต่อไปก็ยังใช้ Session เดิม งับ (อยากลองในสิ่งที่ curl ทำไม่ได้ (อาจเพราะไม่เข้าใจมันเอง เหอะ))

แปลกใจทำไม    curl , fsockopen ,php snoopy ทำไม ถึงใช้ Session เดี่ยวกับการเข้าหน้าเว็บปกติไม่ได้

Tee++;

ทำได้ครับ มันสามารถ Store Cookie ไว้กับตัวได้ โดยที่ cURL จะ Store ในไฟล์ ดูเรื่อง cookie jar

ส่วนพวก httpClient มักจะ store ใน Session ถ้าจะใช้ระดับนี้ผมว่าไปเอา ของ Zend มาใช้จะดีกว่า

ส่วน session ของเวบ มันวิ่งได้ ปกติอยู่แล้วครับ เพราะเก็บ ที่ Server ไม่ใช่ Client

ส่วนการ authenticate แบบ pop-up อันนี้ผมเคยลองแต่กับ cURL โดย set opt ตัวนี้ลงไปด้วย
CURLOPT_UNRESTRICTED_AUTH

ส่วนเรื่อง SSL ผมก็เคยลองแต่ของ cURL โดย set opt ตัวนี้
CURLOPT_SSL_VERIFYPEER


ถ้าให้เลือกระหว่าง 2 ตัวนี้ ผมเลือกใช้งาน cURL ครับ เพราะเขียนโครตง่าย
[direct=http://laravel.in.th]Laravel in Thai[/direct]
[direct=http://jquerytips.com]jQueryTips by Tee++;[/direct]
[direct=https://www.facebook.com/jQueryTips]jQueryTips Page[/direct]
[direct=https://www.facebook.com/Laravel.in.th]Laravel in Thai Page[/direct]
[direct=https://twitter.com/Teepluss]Teepluss's Twitter[/direct]


Amnaj

cURL ยอมรับว่าใช้ง่าย เข้าใจง่ายครับ แต่ก็ยังใช้กับเว็บบางที่ไม่ได้
ลองใช้ EffeTech HTTP Sniffer ตรวจสอบค่าตอนส่งแบบปกติ กับที่ใช้ cURL มันต่างกัน
ตรง ความแตกต่างของ Cookie มันเกี่ยวกันไหมนี่


เพิ่มเติม สมมุติ เรา ใช้ เบราเซอร์ ล็อคอินเว็บ เราจะเอา Session มาใช้ใน cURL ได้ป่ะ ลองไปดู Session ในเครื่องกับที่ใช้ cURL มันคนละรูปแบบเลย