2009-12-16 38 views
7

Nói rằng tôi tải lên một tập tin với PHP, CURL:PHP cURL: Bằng tay thiết lập các tiêu đề nội dung có độ dài

$postData = array(); 

$postData['file_name'] = "test.txt"; 
$postData['submit'] = "UPLOAD"; 

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); 

Bây giờ giả sử tôi phải tự đặt tiêu đề nội dung dài.

$headers=array(
    "POST /rest/objects HTTP/1.1", 
    'accept: */*', 
    "content-length: 0" //instead of 0, how could I get the length of the body from curl? 
    ) 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); //set headers 
$response = curl_exec($ch); 

Làm cách nào để đo kích thước của cơ thể? (chỉ cần chỉ định kích thước tệp là chiều dài nội dung dường như không hoạt động)

Ví dụ khác nếu nội dung chứa dữ liệu không phải là tệp thực. (được đặt theo cách thủ công bởi postfields) Trong tình huống đó, làm thế nào tôi có được độ dài nội dung của cơ thể?

Cảm ơn mọi ánh sáng bị rơi về vấn đề này, dường như đây là vấn đề khó khăn.

Trả lời

7

Để có độ dài của nội dung bài đăng, hãy thử định dạng các trường trong chuỗi kiểu GET (aka param1=value1&param2=value2) rồi đặt chuỗi đó làm CURL_POSTFIELDS với curl_setopt. Một mảng không cần phải được cung cấp. Bạn chỉ có thể sử dụng strlen() để lấy giá trị để sử dụng cho tiêu đề có độ dài nội dung.

Nếu bạn đăng một tệp (hoặc tệp) ngoài các trường khác, như bạn có thể ở trong ví dụ trên, bạn phải cung cấp giá trị cho tệp là @/path/to/file, sau đó nhận tệp theo byte và thêm với tổng chiều dài nội dung.

Vì vậy, đối với ví dụ trên, giả sử tệp test.txt nằm trong số /test dir của máy chủ của bạn, chuỗi giá trị bài đăng sẽ là [email protected]/test/text.txt&submit=UPLOAD. Bạn PHẢI url_encode chuỗi này nữa, trước khi bạn gán nó làm giá trị bài đăng curl. Để có được chiều dài nội dung bạn nhận được độ dài của chuỗi đó (mã hóa url của bài đăng) và thêm nó vào kích thước của /test/test.txt.

1

Điều đó nghe có vẻ sai. Dữ liệu được tạo sẽ bao gồm tiêu đề phụ và Nội dung dài cần cũng bao gồm các tiêu đề phụ đó. Và vì các tiêu đề phụ bao gồm một ranh giới, có thể bao gồm dữ liệu này, toàn bộ điều này không thể hoạt động (không thể chỉ định kích thước mà không biết chính xác yêu cầu hoàn chỉnh sẽ là gì.)

Thực ra, chỉ có một có thể tính toán kích thước, từ những gì tôi có thể thấy chính là cURL. Nhưng nó không làm điều đó 8-P

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