10/10/2018, 09:51

PHP: hỏi về fsockopen

Bít cái này cũng lâu rồi. Nhưng nay mới có dịp ứng dụng thực sự. Nhưng khi test vướng phải một vài lỗi mà chẳng bít tại sao.

Tôi dùng hàm này để get 1 trang html về:

PHP Code:
<?
$current_url="www.ddth.com";
$current_dir="www.ddth.com/showthread.php?p=1862580";
$fp = fsockopen ($current_dir, 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br> ";
} else {
fputs ($fp, "GET / HTTP/1.0 Host: ".$current_url." ");
while (!feof($fp)) {
$current_url_content.=fgets ($fp,128);
}
fclose ($fp);


echo $current_url_content;
?>
Nhưng sao nó toàn ra kết quả gì ko:

Code:
HTTP/1.0 302 Found Location: http://guide.opendns.com/?url=www.ddth.com Content-type: text/html Content-Length: 0 Connection: close Date: Sat, 17 Oct 2009 03:19:39 GMT Server: OpenDNS Guide
Bác nào có kinh nghiệm cái này chia sẻ tui chút xíu. Lục tung google lên mà vẫn chưa ổn.

Thanks!
Mahakaruna viết 11:56 ngày 10/10/2018
Thay
$fp = fsockopen ($current_dir, 80, $errno, $errstr, 30);
Thành
$fp = fsockopen ($current_url, 80, $errno, $errstr, 30);
Shellingfox viết 11:53 ngày 10/10/2018
Nếu bạn muốn lấy content thì đơn giản hơn, xài hàm file_get_contents();
PHP Code:
$url 'http://www.ddth.com/showthread.php?p=1862580';
$string file_get_contents($url); 
Nếu bạn vẫn muốn sử dụng fsockopen thì làm như vầy:
PHP Code:
$hostname 'www.ddth.com';
$request '/showthread.php?p=1862580';
if(!(
$fp fsockopen($hostname80$errno$errstr))) {
    echo 
'Could not connect to DDTH! Error number: ' $errno '(' $errstr ')';  
} else {
    
$getString "GET {$request} HTTP/1.0\r\nConnection: close\r\n\r\n";
    
fputs($fp$getString);
    
    
$buffer '';
    while(!
feof($fp)) {
        
$buffer .= fgets($fp128);
    }
    
fclose($fp);
    
    echo 
$buffer;

Còn nếu muốn chi tiết hơn, các tham số, cookies... như một browser thực sự và nhanh hơn thì nên sử dụng curl
http://php.net/curl
s.code viết 11:51 ngày 10/10/2018
ủa sao kết quả nó cứ có thêm đoạn đầu:

Code:
HTTP/1.1 200 OK
Date: Sat, 17 Oct 2009 03:44:40 GMT
Server: Apache
Cache-Control: private
Pragma: private
X-UA-Compatible: IE=7
Set-Cookie: bblastvisit=1255751080; expires=Sun, 17-Oct-2010 03:44:40 GMT; path=/
Set-Cookie: bblastactivity=0; expires=Sun, 17-Oct-2010 03:44:40 GMT; path=/
Connection: close
Content-Type: text/html; charset=utf-8
Làm sao nó ko hiện lẫn vào kết quả nhỉ?



Được gửi bởi Shellingfox
Nếu bạn muốn lấy content thì đơn giản hơn, xài hàm file_get_contents();
PHP Code:
$url 'http://www.ddth.com/showthread.php?p=1862580';
$string file_get_contents($url); 
Còn nếu muốn chi tiết hơn, các tham số, cookies... như một browser thực sự thì nên sử dụng curl
http://php.net/curl
Cảm ơn bạn đã trả lời. Nếu dùng dc hàm đó thì còn nói làm gì nữa. Cái server của mình disable open remote file rồi.
Mahakaruna viết 11:59 ngày 10/10/2018
Được gửi bởi s.code
ủa sao kết quả nó cứ có thêm đoạn đầu:

Code:
HTTP/1.1 200 OK
Date: Sat, 17 Oct 2009 03:44:40 GMT
Server: Apache
Cache-Control: private
Pragma: private
X-UA-Compatible: IE=7
Set-Cookie: bblastvisit=1255751080; expires=Sun, 17-Oct-2010 03:44:40 GMT; path=/
Set-Cookie: bblastactivity=0; expires=Sun, 17-Oct-2010 03:44:40 GMT; path=/
Connection: close
Content-Type: text/html; charset=utf-8
Làm sao nó ko hiện lẫn vào kết quả nhỉ?
Dĩ nhiên ông dùng fsockopen thì dữ liệu trả về ở dạng thô.
Bao gồm cả response header + body
Cái ông cần chỉ là body thì xử lí chuỗi thôi, tìm kí tự "\r\n\r\n" đầu tiên rồi lấy dữ liệu từ đó đi thì sẽ ra html content (trg trường hợp này)
s.code viết 12:05 ngày 10/10/2018
Híc híc. Củ chuối thật. get cái server window nó toàn: Bad Request (Invalid Verb)


Sao giờ........
khoanhi viết 12:03 ngày 10/10/2018
Get cái gì cũng nên giả lập như browser, tức là thêm mấy thông tin ở header nữa! Như thế chắc ăn! Mình từng làm cái này, thì thấy có một vài web, không truyền cái User-Agent nó cũng báo lỗi ....

Nếu dùng được curl là tốt, đơn giản

Còn nếu không dùng được curl, phải dùng fsockopen thì tham khảo cái file http.php của thằng rapidleech! Nó viết chuối (php + html + js lẫn lộn) những cũng đáng để đọc

Trước kia khi chưa biết gì, mình thường dùng flashget down cái trang cần lấy nội dung để xem request của flashget gồm các thông số gì. Áp vào, thế là xong
thanggky viết 12:06 ngày 10/10/2018
Ai có thể chỉ cho mình cách làm sao khi nhập giá nó tự thêm dấu "," đằng trước 3 số đằng sau như này ko ạ? ví dụ : "12,300" .Ai giúp với
s.code viết 11:55 ngày 10/10/2018
PHP Code:
<?
$num = 122424242;
echo number_format($num, "", "", ",");
?>
thanggky viết 12:00 ngày 10/10/2018
tiện bạn cho mình xin hàm giới hạn upload file đc ko, ví dụ giới hạn là 1Mb thui
Bài liên quan
0