[英]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¶m2=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.