Cách đây không lâu tôi được đăng trên trang web của tôi như thế nào tôi đã được sử dụng php và curl để làm tự động tải lên hình ảnh để Drupal và hình ảnh geolocating. Một số người yêu cầu kịch bản, cả nhóm đến đây từ Google bằng cách tìm kiếm về những điều tương tự, vì vậy đây là một hướng dẫn nhỏ về cách để làm điều đó.
Trước hết, bạn sẽ cần phải mở rộng libcurl để PHP cài đặt. Các đoạn mã tôi sẽ trình bày ở đây có thể làm việc nếu bạn sẽ biến chúng thành Snoopy, nhưng libcurl là nhanh hơn.
Những gì chúng ta sẽ làm: chúng ta sẽ đăng nhập vào Drupal và chúng tôi sẽ thực hiện các hoạt động khác nhau.
1. Đăng nhập vào
Bước đầu tiên là để đăng nhập. Chúng tôi sẽ gửi các thông tin sử dụng POST đến / người dùng / trang đăng nhập của trang web Drupal của chúng tôi. Bí quyết ở đây là để nắm bắt các cookie được gửi bởi các máy chủ để sử dụng nó sau này.
Bước đầu tiên là để đăng nhập. Chúng tôi sẽ gửi các thông tin sử dụng POST đến / người dùng / trang đăng nhập của trang web Drupal của chúng tôi. Bí quyết ở đây là để nắm bắt các cookie được gửi bởi các máy chủ để sử dụng nó sau này.
Hãy init curl và thiết lập một số tùy chọn: các trang web chúng tôi sẽ sử dụng cùng với các trang đăng nhập và một tập tin trên máy chủ của chúng tôi mà sẽ lưu trữ các tập tin cookie. Hãy cẩn thận, người dùng rằng các máy chủ web chạy như cần phải có quyền ghi có. CURLOPT_POST cho curl chúng ta sẽ sử dụng POST để gửi dữ liệu mẫu.
$ CRL = curl_init ();
$ url = "http://www.example.com/user/login";
curl_setopt ($ CRL, CURLOPT_URL, $ url);
curl_setopt ($ CRL, CURLOPT_COOKIEFILE, "/ tmp / cookie. txt ");
curl_setopt ($ CRL, CURLOPT_COOKIEJAR," /tmp/cookie.txt ");
curl_setopt ($ CRL, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ CRL, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ CRL, CURLOPT_POST, 1) ;
Tiếp theo, chúng ta cần phải thiết lập tên người dùng và mật khẩu của người sử dụng chúng ta sẽ đăng nhập và gửi dữ liệu đến các kịch bản đăng nhập. Để làm được điều này, chúng ta cần phải kiểm tra các mẫu đăng nhập drupal chuẩn và xem tên các lĩnh vực: họ đang chỉnh sửa [Tên], chỉnh sửa [vượt qua], sửa [form_id] và op.
Cảnh báo: Hãy cẩn thận để init tất cả các yếu tố của hình thức vì thiếu một số sẽ làm cho các kịch bản sử dụng được. Đặc biệt, chỉnh sửa [form_id] là rất cần thiết.
// this array will hold the field names and values
$postdata=array(
"edit[name]"=>"admin",
"edit[pass]"=>"password",
"edit[form_id]"=>"user_login",
"op"=>"Log in"
);
// tell curl we're going to send $postdata as the POST data
curl_setopt ($crl, CURLOPT_POSTFIELDS, $postdata);
Bây giờ là thời gian để đăng nhập.
$result=curl_exec($crl);if ($headers['url'] == $url) {
die("Cannot login.");
}
Những gì chúng tôi đang làm ở đây là gửi dữ liệu mẫu để trang đăng nhập Drupal. Sau đó chúng tôi có được các tiêu đề của các phản ứng và kiểm tra xem địa chỉ trả lại là một tên đăng nhập. Nếu có, thì nó có nghĩa là chúng tôi không thể đăng nhập. Điều này xảy ra bởi vì, sau khi đăng nhập thành công, Drupal chuyển hướng đếnhttp://www.example.com/user/2, 2 là id của người dùng đăng nhập. Trong trường hợp thất bại, nó sẽ trả về trang đăng nhập hiển thị một lỗi.
Nếu mọi thứ đều ok, chúng tôi đang đăng nhập. Bây giờ bạn có thể làm những thứ nghiêm trọng hơn. :) Hãy tiếp tục với một số ví dụ:
2. Ví dụ: Thêm một hình ảnh
$file = "test.jpg";
$url = "http://www.example.com/node/add/image";
curl_setopt($crl, CURLOPT_URL, $url);
$postdata = array("edit[title]"=>$file,
"edit[image]"=>"@$file.jpg",
"edit[body]"=>"This is an image posted with cURL.",
"op"=>"Submit",
"edit[format]"=>"1",
"edit[comment]"=>"2",
"edit[name]"=>"admin",
"edit[date]"=>"",
"edit[status]"=>"1",
"edit[moderate]"=>"0",
"edit[promote]"=>"1",
"edit[sticky]"=>"0",
"edit[revision]"=>"0",
"edit[images][_original]"=>"",
"edit[images][thumbnail]"=>"",
"edit[images][preview]"=>"",
"edit[form_id]"=>"image_node_form"
);
curl_setopt ($crl, CURLOPT_POSTFIELDS, $postdata);
$result=curl_exec($crl);
$headers = curl_getinfo($crl);
if ($headers['url'] == $url) {
die("Cannot add the image.");
}
Tôi nhìn qua các hình thức hình ảnh được tạo ra bởi add Drupal, lưu ý tên của các trường và các giá trị mặc định của chúng. Sau đó, chúng tôi điền này với thông tin của chúng tôi và gửi dữ liệu. Bởi vì chúng tôi sử dụng cùng một tài nguyên, $ CRL, chúng tôi vẫn đang đăng nhập. Cuối cùng chúng tôi kiểm tra xem các url kết quả vẫn là "nút / thêm / hình ảnh". Nếu có, thì một số dữ liệu không được điền đúng và Drupal trở chúng ta đến nút thêm trang.
Có gì với điều đó @ trong các mã?
"edit[image]"=>"@$file.jpg",
chỉnh sửa [hình ảnh] là một đầu vào của loại tập tin. Bằng cách sử dụng @, chúng tôi nói với cURL để lấy nội dung của file đó và gửi chúng đến các add script.
3. Ví dụ: Thêm một người dùng
$url = "http://www.example.com/admin/user/create";
curl_setopt($crl, CURLOPT_URL, $url);
$postdata = array(
"edit[name]"=>"newuser",
"edit[mail]"=>"newuser@example.com",
"edit[password]"=>"password",
"edit[notify]"=>1,
"op"=>"Submit",
"edit[form_id]"=>"user_register"
);
curl_setopt ($crl, CURLOPT_POSTFIELDS, $postdata);
$result=curl_exec($crl);
$headers = curl_getinfo($crl);
if ($headers['url'] == $url) {
die("Cannot add the image.");
}