2010-08-28 39 views
14

Làm cách nào để lấy mã nguồn html của http://www.example-webpage.com/file.html mà không sử dụng file_get_contents()?php: Nhận mã nguồn html bằng cURL

Tôi cần biết điều này vì trên một số máy chủ web allow_url_fopen bị tắt nên bạn không thể sử dụng file_get_contents(). Có thể lấy nguồn của tệp html bằng cURL (nếu hỗ trợ cURL được bật) không? Nếu vậy, làm thế nào? Cảm ơn.

Trả lời

25

Hãy thử như sau:

$ch = curl_init("http://www.example-webpage.com/file.html"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); 
$content = curl_exec($ch); 
curl_close($ch); 

tôi chỉ muốn giới thiệu này cho các tập tin nhỏ. Các tệp lớn được đọc toàn bộ và có khả năng tạo ra lỗi bộ nhớ.

chỉnh sửa: sau khi một số thảo luận trong nhận xét, chúng tôi phát hiện ra rằng máy chủ giải quyết tên máy chủ và trang đã thêm tài nguyên https để giải pháp tạm thời của bạn (cho đến khi máy chủ của bạn sửa tên giải quyết) .

những gì tôi đã làm chỉ là ping graph.facebook.com để xem địa chỉ IP, thay thế tên máy chủ bằng địa chỉ IP và thay vào đó cung cấp tiêu đề theo cách thủ công. tuy nhiên điều này làm cho chứng chỉ ssl không hợp lệ nên chúng tôi phải tắt xác minh ngang hàng

//$url = "https://graph.facebook.com/19165649929?fields=name"; 
$url = "https://66.220.146.224/19165649929?fields=name"; 
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Host: graph.facebook.com')); 
$output = curl_exec($ch); 
curl_close($ch); 

hãy nhớ rằng địa chỉ IP có thể thay đổi và đây là nguồn không rõ ràng. bạn cũng nên xử lý lỗi bằng cách sử dụng curl_error();

+0

cảm ơn nhưng tôi nhận được tệp trống. Tôi đang cố gắng tìm lỗi –

+0

John, nếu điều này không hoạt động thì hãy kiểm tra URL của bạn. Ngoài ra, đừng quên curl_close ($ ch) ở cuối. – Brad

+0

Ứng dụng có hoạt động với tệp văn bản thuần túy thay vì tệp html không? Tôi đã thử nghiệm nó với một tập tin văn bản đơn giản - và tôi nhận được một trang trống. –

3

Hãy thử http://php.net/manual/en/curl.examples-basic.php :)

<?php 

$ch = curl_init("http://www.example.com/"); 
$fp = fopen("example_homepage.txt", "w"); 

curl_setopt($ch, CURLOPT_FILE, $fp); 
curl_setopt($ch, CURLOPT_HEADER, 0); 

$output = curl_exec($ch); 
curl_close($ch); 
fclose($fp); 
?> 

Như các tài liệu nói:

Ý tưởng cơ bản đằng sau các chức năng cURL là bạn khởi tạo một phiên cURL sử dụng curl_init(), sau đó bạn có thể đặt tất cả các tùy chọn của bạn để chuyển qua curl_setopt(), sau đó bạn có thể thực hiện phiên với curl_exec() và sau đó bạn kết thúc phiên của bạn bằng cách sử dụng curl_close().

Các vấn đề liên quan