簡體   English   中英

PHP CURL:手動設置內容長度標題

[英]PHP CURL: Manually setting the content-length header

假設我使用PHP,CURL上傳文件:

$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 );

現在假設我必須手動設置內容長度標頭。

$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);

我該如何測量身體的大小? (只是將filesize指定為內容長度似乎不起作用)

在另一個示例中,如果正文包含的數據不是實際文件。 (由postfields手動設置)在那種情況下,我如何獲得身體的內容長度?

感謝任何關於此的燈光,這似乎是一個棘手的問題。

要獲得帖子主體的長度,請嘗試將字段格式化為GET樣式字符串(也稱為param1=value1&param2=value2 ),然后使用curl_setopt將該字符串設置為CURL_POSTFIELDS 不必提供陣列。 您可以簡單地使用strlen()來獲取用於內容長度標頭的值。

如果您正在發布除其他字段之外的文件(或多個文件),就像您在上面的示例中所示,您必須將文件的值提供為@/path/to/file ,然后以字節為單位獲取文件大小並將其添加到總內容長度。

因此,對於上面的示例,假設文件test.txt位於服務器的/test dir中,post值字符串將為file_name=@/test/text.txt&submit=UPLOAD 在將其指定為curl post值之前,您必須對此字符串進行url_encode 要獲取內容長度,您將獲得該字符串的長度(post url-encoding)並將其添加到 /test/test.txt 的文件大小中。

這聽起來不對。 生成的數據將包括子標題和Content-Length需要也包括那些子標題。 並且由於子標題包含邊界,可能包含此數據和該數據,因此整個過程無法工作(如果不確切知道完整請求將會是什么,則無法指定大小。)

實際上,唯一可以計算尺寸的是我所看到的cURL本身。 但它沒有8-P

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM