10/10/2018, 10:45

Vấn đề với file_get_contents

Có ba link sau đây mình dùng file_get_contents không được mong các bạn chỉ giúp cách dùng.
1. http://doisongphapluat.com.vn/Story....zone=1&ID=5867.
Bị báo lỗi "failed to open stream: HTTP request failed! HTTP/1.1 500 Internal Server Error"

2. http://www.toquoc.gov.vn/Thongtin/Di...-An-Ngoai.html
Bị báo lỗi "DotNetNuke Error: - Version 04.09.00"

3. http://nhipsongso.tuoitre.vn/Index.a...6&ChannelID=16
Với link này, ko hiển thị được nội dung chính.

Mình đã dùng như thế này.
<?php
$file = file_get_contents('http://doisongphapluat.com.vn/Story.aspx?lang=vn&zoneparent=0&zone=1&ID=5867');
echo $file;
?>

Đồng thời đã thử với curl nhưng cũng không được

<?php
$u = 'http://doisongphapluat.com.vn/Story.aspx?lang=vn&zoneparent=0&zone=1&ID=5867';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $u);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$translate = curl_exec($ch);
curl_close($ch);
echo $translate.'<br/>';
?>

Những cách thức trên mình đã sử dụng và chạy tốt đối với các link khác.
Mong các bạn trợ giúp!
VnVision viết 12:54 ngày 10/10/2018
Thử cái link đầu của bạn = lệnh wget thì thấy trả lỗi 500 trong khi vào bằng browser bình thường => họ chặn leech đối với các request ko phải browser rồi. Để leech đc bạn phải thêm các option header cho curl để nó giống như một browser truy cập vào (hoặc header giống google spider vì mình ko tin họ ko mở cửa cho các bộ máy tìm kiếm).
BnoL viết 12:53 ngày 10/10/2018
khi CURL bạn fake User Agent xem
thuyduongcd viết 12:56 ngày 10/10/2018
Để tránh file_get_contents thì có 1001 cách khác nhau.

Như cái trang doisongphapluat, họ sử dụng cookies tên là ASP.NET_SessionId. Mỗi khi được request, server sẽ check cookies này. Nếu chưa tồn tại nó sẽ tạo ra cookies này sau đó redirect lại chính nó. Ở lần request thứ hai, do cookies đã tồn tại nên sẽ trả về nội dung. Vì vậy trên browser hiển thị tốt.

Còn khi bạn dùng file_get_contents(), cookies không được tạo ra dẫn đến tình trạng redirect chính nó mãi mãi và đến một lúc nào đó sẽ sinh lỗi 500 Internal Server Error
VnVision viết 13:00 ngày 10/10/2018
Được gửi bởi thuyduongcd
Để tránh file_get_contents thì có 1001 cách khác nhau.
Cũng ko có nhiều cách để tránh file_get_contents. Bởi một request từ browser thật sự so với một request từ file_get_contents ko khác nhau nhiều ngoài mấy cái header/cookie (lưu ý rằng cookie cũng chỉ là một loại header được gửi giữa user & server).

Được gửi bởi thuyduongcd
Như cái trang doisongphapluat, họ sử dụng cookies tên là ASP.NET_SessionId. Mỗi khi được request, server sẽ check cookies này. Nếu chưa tồn tại nó sẽ tạo ra cookies này sau đó redirect lại chính nó. Ở lần request thứ hai, do cookies đã tồn tại nên sẽ trả về nội dung. Vì vậy trên browser hiển thị tốt.

Còn khi bạn dùng file_get_contents(), cookies không được tạo ra dẫn đến tình trạng redirect chính nó mãi mãi và đến một lúc nào đó sẽ sinh lỗi 500 Internal Server Error
Vừa check xong. Nó không làm như cách bạn nói đâu. Làm vậy thì các search engine spider ko support cookie như google bot sẽ không crawl site họ được => họ ko ngốc vậy. Chỉ cần thêm cái header như mình nói để curl giống như một browser là đc thôi:

PHP Code:
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); 
jacobleq viết 12:58 ngày 10/10/2018
Cảm ơn các bạn đã giúp đỡ. Đêm qua ngồi đọc, google cả tối vẫn ko ra.
Hôm nay làm theo bạn VnVision, chạy rất ok. Rất mong bạn có thể giải thích giúp mình chi tiết hơn một chút về CURLOPT_USERAGENT và các phần tử phía sau để giúp mình và các thành viên khác hiểu sâu hơn về vấn đề này.

Với link :http://nhipsongso.tuoitre.vn/Index.a...6&ChannelID=16 . Không rõ họ dùng cách gì nhưng không thể nào khiến nội dung chính hiện lên. Nó chỉ hiện lên header, side bar và footer. Ko thể làm hiện nội dung chính của nó lên được. Các bạn cho mình ý kiến nhé
VnVision viết 13:00 ngày 10/10/2018
User agent chỉ là một loại header được các chương trình sử dụng gửi kèm với request đến các server để thông báo cho server biết đây là chương trình gì, phiên bản bao nhiêu, dùng trên OS nào... Bạn có thể google "browser user agent" để tìm hiểu thêm.

Trang của tuoitre.vn bạn đưa họ chỉ dùng css để cho nội dung ko hiện ra:

Code:
<div id="DivNSSPlcCenter" style="display: none;">
sau đó dùng javascript để hiển thị nội dung đã được giấu = css thôi. Bạn view source của họ sẽ thấy nội dung bài viết ở trong source. Bạn chỉ cần dùng php để extract nội dung đó ra thôi.
jacobleq viết 12:49 ngày 10/10/2018
làm theo hướng dẫn của VnVision, các vấn đề của mình đã được giải quyết. Cảm ơn sự giúp đỡ của các bạn.
Bài liên quan
0