cURL简单文件上传 - 417期望失败

Chr*_*ris 12 linux bash curl

我有一个简单的文件上传帖子与cURL的问题...我这么做了很多次,但在这种情况下我总是从服务器得到"417期望失败".当我尝试使用我的浏览器发布时,它可以100%工作但cURL不能.

那是我的配置:

我的简单测试表单有效:

<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>
Run Code Online (Sandbox Code Playgroud)

这里是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";
    }
?>
Run Code Online (Sandbox Code Playgroud)

我的cURL脚本(image_upload.sh)如下所示:

#!/bin/sh

file=$1

result=$(curl -s -L -F "userfile=@$file;type=application/octet-stream;" "http://images.example.com/image_upload.php")

echo $result
Run Code Online (Sandbox Code Playgroud)

这里是服务器头:

> 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
Run Code Online (Sandbox Code Playgroud)

我不知道错误在哪里,也许你能认出来.

the*_*mie 18

将此添加到lighttpd配置中:server.reject-expect-100-with-417 ="disable"

重启lighttpd.欢呼:)


asa*_*ami 17

当您在HTTP 1.1模式下运行的代理后面时会发生这种情况,其中客户端在HTTP 1.0中运行.在curl命令行中,您可以添加--http1.0参数来解决问题


ram*_*ram 10

也可以使用set opt header设置修复:

curl_setopt($curl,CURLOPT_HTTPHEADER,array("Expect:  "));
Run Code Online (Sandbox Code Playgroud)

http://www.khattam.info/417-expectation-failed-in-php-curl-while-submitting-multi-part-forms-2011-04-14.html

  • 我想我找到了它的工作原理,所以对于任何好奇的人来说:显然对于数据 &gt; 1024 字节 CURL 自动设置“期望:100-继续”(客户端期望服务器仅获取标头,然后发送“100”返回代码获取其余数据)。如果服务器不受干扰,CURL 就会产生此错误。设置“Expect:”显式禁用此自动行为。 (2认同)