Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

cURL Simple File Upload - 417 Expectation Failed

Tags:

linux

bash

curl

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.

like image 320
Chris Avatar asked Feb 02 '12 22:02

Chris


People also ask

What is 417 expectation failed?

The HTTP 417 Expectation Failed client error response code indicates that the expectation given in the request's Expect header could not be met.

When should I use HTTP 417?

The HTTP Status Code 417 means that the server cannot meet the requirements of the Expect request-header field.


2 Answers

add this to your lighttpd config: server.reject-expect-100-with-417 = "disable"

restart lighttpd. cheers :)

like image 160
the1plummie Avatar answered Sep 25 '22 10:09

the1plummie


This happens when you are behind a proxy which is running in HTTP 1.1 mode where as the client is running in HTTP 1.0. In curl command line you can add --http1.0 in the arguments to solve the issue

like image 38
asami Avatar answered Sep 26 '22 10:09

asami