Chúng tôi đã sử dụng thông tin từ một trang web trong một thời gian (điều mà trang web cho phép nếu bạn đề cập đến nguồn và chúng tôi làm) và chúng tôi đã sao chép thông tin bằng tay. Như bạn có thể tưởng tượng điều này có thể trở nên tẻ nhạt khá nhanh vì vậy tôi đã cố gắng để tự động hóa quá trình bằng cách lấy thông tin bằng một kịch bản PHP.Làm cách nào để ngụy trang tập lệnh PHP của bạn làm trình duyệt?
URL Tôi đang cố gắng để lấy là:
http://mediaforest.ro/weeklycharts/viewchart.aspx?r=WeeklyChartRadioLocal&y=2010&w=46 08-11-10 14-11-10
Nếu tôi nhập nó vào trình duyệt nó hoạt động, nếu tôi cố gắng một file_get_contents() tôi nhận được Bad Request
I figured họ đã kiểm tra xem khách hàng có phải là trình duyệt hay không, vì vậy tôi đã cuộn một giải pháp dựa trên CURL:
$ch = curl_init();
$header=array(
'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language: en-us,en;q=0.5',
'Accept-Encoding: gzip,deflate',
'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7',
'Keep-Alive: 115',
'Connection: keep-alive',
);
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_COOKIEFILE,'cookies.txt');
curl_setopt($ch,CURLOPT_COOKIEJAR,'cookies.txt');
curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
$result=curl_exec($ch);
curl_close($ch);
Tôi đã kiểm tra và các tiêu đề giống hệt với của tôi header owser và tôi vẫn nhận được Yêu cầu Bad
Vì vậy, tôi đã cố gắng giải pháp khác:
http://www.php.net/manual/en/function.curl-setopt.php#78046
Thật không may điều này không làm việc, hoặc và tôi ra khỏi ý tưởng. Tôi đang thiếu gì?
Bạn có sử dụng 'urlencode' trên URL trước khi gọi' file_get_contents' không? –
Chết tiệt, thật đáng xấu hổ ... làm thế nào tôi có thể bỏ lỡ điều đó? – pandronic
Vâng, nó hoạt động ngay cả với file_get_contents(), do đó, không có bảo vệ nào. Xin lỗi vì đã lãng phí thời gian của mọi người :) – pandronic