Linux cURL 简单文件上传 - 417 预期失败
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/9120760/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
cURL Simple File Upload - 417 Expectation Failed
提问by Chris
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.
我有一个带有 cURL 的简单文件上传帖子的问题......我做了很多次,但在这种情况下,我总是从服务器收到“417 Expectation Failed”。当我尝试使用浏览器发布时,它可以 100% 工作,但使用 cURL 则不行。
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:
这里是 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:
我的 cURL 脚本 (image_upload.sh) 如下所示:
#!/bin/sh
file=
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.
我不知道错误在哪里,也许你能认出它。
采纳答案by ram
Can also be fixed using set opt header setting:
也可以使用 set opt 标头设置进行修复:
curl_setopt($curl,CURLOPT_HTTPHEADER,array("Expect: "));
回答by asami
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
当您使用以 HTTP 1.1 模式运行的代理,而客户端以 HTTP 1.0 模式运行时,就会发生这种情况。在 curl 命令行中,您可以添加--http1.0
参数来解决问题
回答by the1plummie
add this to your lighttpd config: server.reject-expect-100-with-417 = "disable"
将此添加到您的 lighttpd 配置中: server.reject-expect-100-with-417 = "disable"
restart lighttpd. cheers :)
重启 lighttpd。欢呼:)