10/10/2018, 10:21

Lấy nội dung của url từ web ( yêu cầu login )

Mình đang làm tool tự động lấy nội dung của url từ 1 web. Web này yêu cầu đăng nhập nên mình phải làm cái tự động đăng nhập rồi mới lấy nội dung:
Code:
function get_data($url)
{
	$ch = curl_init();
	curl_setopt($ch,CURLOPT_URL,$url);
	curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
	curl_setopt ($ch, CURLOPT_POSTFIELDS, 'username=user1&password=pass1');//Tự động điền vào các text box

	$data = curl_exec($ch);
	curl_close($ch);
	return $data;
}
Giải thích:
- Biến $url là link mình cần lấy nội dung, bình thường nếu đăng nhập trên web xong và click chuột vào đó, trình duyệt sẽ cho download 1 file bình thường.
- user1 và pass1 là thông tin đăng nhập trên web đó của mình.

Ban đầu thì chương trình chạy OK nhưng gần đây không rõ bị chặn kiểu gì mà không được. Thông tin biến $data lấy về lại là trang yêu cầu đăng nhập ( có nghĩa là code của mình không qua được phần đó ). Mình đã kiểm tra thì tên các text box login không hề thay đổi (username và password).
Các bạn có cao kiến gì không ?
Thanks!
Scripted viết 12:35 ngày 10/10/2018
Có thể họ detect browser, bạn hãy set cái header của bạn wa browser name giống tên Firefox hay Internet Epxlorer xem
Mr.Triết viết 12:34 ngày 10/10/2018
Code:
function get_data($url)
{
	$useragent="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20100326 Firefox/3.6";  
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_USERAGENT, $useragent); 
	curl_setopt($ch,CURLOPT_URL,$url);
	curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
	curl_setopt ($ch, CURLOPT_POSTFIELDS, 'username=user1&password=pass1');//Tự động điền vào các text box

	$data = curl_exec($ch);
	curl_close($ch);
	return $data;
}
Thử xem, được thì được, không thì thôi
chameron viết 12:38 ngày 10/10/2018
em dùng localhost , mở cái ext trong php.ini rồi
nhưng chạy được một lần rùi lần sau nó cứ undefined function curl_init()
thế mới cáu >.< tại sao vậy ?
ngoài dùng curl của thì có thể dùng cái khác nào ko?
dùng file_get_contents có làm được không nhỉ?
với cái link này http://www.dhl.com.vn/publish/vn/en/...rack.high.html
dùng file_get_contents ,lấy trang đó, điền thông tin , ấn submit , ko ra cái gì
có ai giúp được ko?
Thank
relax24h viết 12:25 ngày 10/10/2018
Thanks Mr.Triết, mình đã thử rồi nhưng không được.
To Scripted : Bạn có thể nói cụ thể hơn được không. Hay cách của bạn cũng giống Mr.Triết?
To chameron : dùng file_get_contents có thể lấy nội dung của url nhưng không nhiều tính năng mạnh mẽ như dùng curl
chameron viết 12:35 ngày 10/10/2018
các bác ơi , em vô php.ini bỏ ; rồi mà nó vẫn ko hiểu curl la cái khỉ gì cả
>.< help help
relax24h viết 12:35 ngày 10/10/2018
Bạn xem trong ext có file php_curl.dll không?
chameron viết 12:31 ngày 10/10/2018
có mới bực mình í T_____________T
chả hiểu sao luôn
hoangchau viết 12:28 ngày 10/10/2018
Trường hợp này mình đã từng gặp rồi, khi trên browser gõ u/pass enter thì nó chạy 1 hàm script xử lý rồi mới submit lên server, trong lúc bạn gọi thì ko thể chạy đoạn script đó được. Trong trường hợp này thì bó tay.
Còn 1 cách khác giải quyết trường hợp này là dùng ocx của IE nhúng vào chương trình bạn và điều khiển nó, tuy nhiên tốc độ chậm hơn nhiều so với phương pháp bạn đang làm.
relax24h viết 12:22 ngày 10/10/2018
Thanks hoangchau,
Theo mình chưa chắc do như bạn nói. Vì bản thân trên browser trước đó mình đã submit rồi, nên sau đó mình chỉ giả như là click chuột vào link cần lấy nội dung thôi...
To chameron : Bro thử với bộ cài php khác xem. Nhớ thay đổi php.ini thì phải restart lại server ( Apache, IIS )
Bài liên quan
0