PHP CURL: die manuelle Einstellung der content-length-header
Sagen, dass ich eine Datei hochladen mit 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 );
Nun davon ausgehen, ich habe manuell die content-length-header.
$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);
Wie würde ich das Messen Sie die Größe des Körpers? (nur Angabe der Dateigröße als die Länge des Inhalts nicht zu funktionieren scheint)
In einem anderen Beispiel, was passiert, wenn der Körper enthält die Daten, die nicht auf eine tatsächliche Datei. (manuelle Einstellung durch postfields) In dieser situation, wie würde ich die content-length der Körper?
Vielen Dank für jede Licht auf diese, scheint es, ein hartes Problem.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Um die Länge eines post-body, versuchen Sie die Formatierung der Felder int GET-Stil-string (aka
param1=value1¶m2=value2
) anschließend Einstellung, dass die Zeichenfolge alsCURL_POSTFIELDS
mitcurl_setopt
. Ein array muss nicht geliefert werden. Sie können einfach mitstrlen()
zu erhalten die Wert für den content-length-header.Wenn Sie buchen eine Datei (oder Dateien) zusätzlich zu anderen Feldern, wie Sie zu sein scheinen, in dem obigen Beispiel, geben Sie den Wert für die Datei als
@/path/to/file
, dann bekommen Sie die Dateigröße in bytes und hinzufügen, dass die gesamte content-length.Also für das obige Beispiel, vorausgesetzt, die Datei
test.txt
ist in der/test dir
von Ihrem server, das post-string-Wert wärefile_name=@/test/text.txt&submit=UPLOAD
. Sie MÜSSENurl_encode
dieser string als gut, bevor Sie Sie zuweisen es als der curl-post Wert. Um die Inhalt Länge erhalten Sie die Länge der Zeichenfolge (post-url-encoding) und hinzufügen, um die Dateigröße von/test/test.txt
.Die falsch klingt. Die generierten Daten umfassen sub-Header-und Content-Länge muss auch die sub-überschriften. Und da die sub-Header enthalten eine Grenze, kann auch dieses und dass die Daten, die diese ganze Sache nicht funktionieren kann (die Größe kann nicht angegeben werden, ohne genau zu wissen, was der vollständige Antrag ist zu sein.)
Eigentlich der einzige, der berechnen kann die Größe von dem was ich sehen kann, ist LOCKE selbst. Aber er macht es nicht 8-P