2010-11-15 31 views
12

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ì?

+8

Bạn có sử dụng 'urlencode' trên URL trước khi gọi' file_get_contents' không? –

+0

Chết tiệt, thật đáng xấu hổ ... làm thế nào tôi có thể bỏ lỡ điều đó? – pandronic

+1

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

Trả lời

11

Hãy thử thoát URL của bạn, nó hoạt động cho tôi theo cách đó.

http://mediaforest.ro/weeklycharts/viewchart.aspx?r=WeeklyChartRadioLocal&y=2010&w=46%2008-11-10%2014-11-10 
8

Sử dụng curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12');

Bạn có thể thay thế các useragent với nhau tất nhiên.

Tuy nhiên, "Yêu cầu không hợp lệ" rất có thể KHÔNG liên quan đến một useragent bị thiếu/không hợp lệ. Có vẻ như bản thân máy chủ web không thích yêu cầu của bạn .. không phải ứng dụng phía sau URI được yêu cầu.

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