40 if (count($this->postFields) && empty($this->postFiles)) {
41 return parent::__toString() . (string) $this->postFields;
50 if (
$state == self::STATE_TRANSFER && !$this->body && !count($this->postFields) && !count($this->postFiles)) {
51 $this->
setHeader(
'Content-Length', 0)->removeHeader(
'Transfer-Encoding');
62 if ($contentType ===
null && !$this->
hasHeader(
'Content-Type')) {
63 $contentType = $this->body->getContentType();
67 $this->
setHeader(
'Content-Type', $contentType);
71 if (!$this->body->isSeekable() && $this->expectCutoff !==
false) {
72 $this->
setHeader(
'Expect',
'100-Continue');
76 $size = $this->body->getContentLength();
77 if ($size !==
null && $size !==
false) {
78 $this->
setHeader(
'Content-Length', $size);
79 if ($size > $this->expectCutoff) {
80 $this->
setHeader(
'Expect',
'100-Continue');
82 } elseif (!$this->
hasHeader(
'Content-Length')) {
83 if (
'1.1' == $this->protocolVersion) {
84 $this->
setHeader(
'Transfer-Encoding',
'chunked');
86 throw new RequestException(
87 'Cannot determine Content-Length and cannot use chunked Transfer-Encoding when using HTTP/1.0'
109 $this->expectCutoff = $size;
110 if ($size ===
false || !$this->body) {
112 } elseif ($this->body && $this->body->getSize() && $this->body->getSize() > $size) {
113 $this->
setHeader(
'Expect',
'100-Continue');
122 if ($maxRedirects == 0) {
133 return $this->postFields->get($field);
143 $this->postFields->set($key, $value);
151 $this->postFields->merge($fields);
159 $this->postFields->remove($field);
172 return isset($this->postFiles[$fieldName]) ? $this->postFiles[$fieldName] :
null;
177 unset($this->postFiles[$fieldName]);
183 public function addPostFile($field, $filename =
null, $contentType =
null, $postname =
null)
189 } elseif (is_array($filename)) {
191 foreach ($filename as $file) {
195 } elseif (!is_string($filename)) {
197 } elseif (!empty($filename)) {
199 $data =
new PostFile($field, $filename, $contentType, $postname);
203 if (!isset($this->postFiles[$data->getFieldName()])) {
204 $this->postFiles[$data->getFieldName()] = array($data);
206 $this->postFiles[$data->getFieldName()][] = $data;
216 foreach ($files as $key => $file) {
217 if ($file instanceof PostFileInterface) {
219 } elseif (is_string($file)) {
221 if (is_numeric($key)) {
238 if (!$this->postFiles) {
239 $this->
removeHeader(
'Expect')->setHeader(
'Content-Type', self::URL_ENCODED);
241 $this->
setHeader(
'Content-Type', self::MULTIPART);
242 if ($this->expectCutoff !==
false) {
243 $this->
setHeader(
'Expect',
'100-Continue');