I have a problem with a simple file upload post with cURL… I did it so many times but in this case I always get “417 Expectation Failed” from server. When I try to post with my browser it works 100% but with cURL not.
That’s my configuration:
My simple test form that works:
<form action="http://images.example.com/image_upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="userfile" size="50"> <input type="submit" name="submit"> </form>
here the image_upload.php:
<?php $uploaddir = '/var/www/images.example.com/images/'; $uploadfile = $uploaddir . basename($_FILES['userfile']['name']); if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { echo "File is valid, and was successfully uploaded.n"; } else { echo "Upload failed"; } ?>
my cURL script (image_upload.sh) looks like this:
#!/bin/sh file=$1 result=$(curl -s -L -F "userfile=@$file;type=application/octet-stream;" "http://images.example.com/image_upload.php") echo $result
and here the server headers:
> POST /image_upload.php HTTP/1.1 > User-Agent: curl/7.18.2 (i486-pc-linux-gnu) libcurl/7.18.2 OpenSSL/0.9.8g zlib/1.1.4 libidn/1.8 libssh2/0.18 > Host: images.example.com > Accept: */* > Content-Length: 579 > Expect: 100-continue > Content-Type: multipart/form-data; boundary=----------------------------e237975526cf > < HTTP/1.1 417 Expectation Failed < Connection: close < Content-Length: 0 < Date: Thu, 02 Feb 2012 21:29:22 GMT < Server: lighttpd/1.4.19
I don’t know where the error is, maybe you can recognize it.
Advertisement
Answer
Can also be fixed using set opt header setting:
curl_setopt($curl,CURLOPT_HTTPHEADER,array("Expect: "));