`
haohappy2
  • 浏览: 326311 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Curl HTTP Posts and 100-continue problem solutions

阅读更多

 

I had to work with a PHP-application using the CURL library to send a HTTP POST request to a lighttpd server or apache server.

 

Strangely enough I seemed unable to get anything back from the server when using PHP and I got the correct answer when I was using wget as a reference.

 

This made me check the lightpd log and I once more (I recommend you to read that entry as this is very much dependent on it) came across the friendly error 417

A quick check with Wireshark confirmed: curl was sending the Expect: 100-continue header.

Personally, I think that 100-continue thing is a good thing and it even seems to me that the curl library is intelligent about it and only does that thing when the size of the data to send is larger than a certain threshold.

 

Also, even though people are complaining about it, I think lighttpd does the right thing. The expect-header is mandatory and if lighttpd doesn't support this particular header, the error 417 is the only viable option.

 

What I think though is that the libraries should detect that automatically.

This is because they are creating a behavior that's not consistent to the other types of request: GET, DELETE and HEAD requests all follow a fire-and-forget paradigm and the libraries employ a 1:1 mapping: Set up the request. Send it. Return the received data.

 

With POST (and maybe PUT), the library changes that paradigm and in fact sends two request to the wire while actually pretending in the interface that it's only sending one request.

If it does that, then it should at least be capable enough to handle the cases where their scheme of transparently changing semantics breaks.

 

If you are doing a POST, and the content length is 1,025 or greater, then curl exploits a feature of http 1.1: 100 (Continue) Status.
See
http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.2.3

* it adds a header, "Expect: 100-continue". 
* it then sends the request head, waits for a 100 response code, then sends the content

Not all web servers support this though.  Various errors are returned depending on the server.  If this happens to you, suppress the "Expect" header with this command:

<?php
curl_setopt
($ch, CURLOPT_HTTPHEADER, array('Expect:'
));
?>
See
http://www.gnegg.ch/2007/02/the-return-of-except-100-continue/

 

Also, you should check your libcurl version. whether it's the latest 0.7 or not? if not, please use the latest one to your site.

分享到:
评论

相关推荐

    php使用curl出现Expect:100-continue解决方法

    本文实例讲述了php使用curl出现Expect:100-continue解决方法。分享给大家供大家参考。具体如下: 使用curl POST数据时,如果POST的数据大于1024字节,curl并不会直接就发起POST请求。而是会分两步。 1.发送一个请求...

    cURL(curl-8.4.0-3-windows)

    curl-8.4.0_3-win32-mingw.zip curl-8.4.0_3-win64-mingw.zip curl-8.4.0_3-win64a-mingw.zip

    windows下curl工具 curl-7.71.1-win64-mingw

    **Windows下的curl工具:curl-7.71.1-win64-mingw** curl是一个强大的命令行工具,用于在不同的操作系统平台上进行文件传输,包括Windows。它的全名是Client URL Library,支持多种协议,如HTTP、HTTPS、FTP、FTPS...

    curl-7.68.0-win64-mingw.zip

    《深入理解curl-7.68.0-win64-mingw:Windows环境下的网络数据传输利器》 curl,一个强大的命令行工具,用于传输数据,支持多种协议,包括HTTP、HTTPS、FTP、FTPS等,是开发者进行网络请求调试和数据传输的重要工具...

    curl-7.78.0-win64-mingw.zip

    《curl-7.78.0-win64-mingw:深入理解curl工具与 MingW 环境》 curl,全称为Client URL Library,是一款强大的命令行工具,用于传输数据到或从服务器,支持HTTP、HTTPS、FTP、FTPS等多种协议。其核心功能是通过...

    curl-8.9.1-1-win64-mingw 是一个windows命令行工具,GIT下载速度限速软件

    curl-8.9.1_1-win64-mingw 是一个强大且灵活的命令行工具,主要用于从命令行或脚本中传输数据。该工具支持多种协议,包括HTTP、HTTPS、FTP、FTPS、SFTP、SMTP、IMAP等,广泛应用于开发、测试和系统管理等领域。这个...

    WWW-Curl-4.17.tar_curl_www_www-curl_Perl_

    $curl-&gt;get('http://example.com'); my $response = $curl-&gt;get_content(); print $response; ``` 总结,`WWW-Curl-4.17.tar` 提供了一个方便的 Perl 模块,它封装了强大的 `curl` 功能,使 Perl 开发者能够...

    curl-7.64.0-win64-mingw.zip

    `curl-7.64.0-win64-mingw.zip` 是一个针对Windows操作系统的压缩包,包含了一个适用于64位环境的curl工具。curl是一个功能强大的命令行工具,用于传输数据,如文件、图像或任何类型的资源,通过各种协议,包括HTTP...

    curl-7.76.1-win64-mingw.zip

    curl-7.76.1-win64-mingw.zip

    curl-7.64.1-win64-mingw文件

    `curl-7.64.1-win64-mingw` 是一个针对Windows平台的curl工具的特定版本压缩包。curl是一个开源的命令行工具,用于传输数据到或从URL,支持多种网络协议如HTTP、HTTPS、FTP、FTPS等。这个版本(7.64.1)是为64位的...

    curl-7.71.1-win64-mingw.zip

    `curl-7.71.1-win64-mingw.zip` 是一个针对Windows 64位系统的curl工具的压缩包。curl是一个流行的开源命令行工具,用于在命令行环境中传输数据,支持多种网络协议,如HTTP、HTTPS、FTP、FTPS等。这个版本7.71.1是...

    curl-7.21.0-win64-ssl-sspi

    `curl-7.21.0-win64-ssl-sspi` 是一个针对Windows 64位操作系统的 curl 工具的版本,它包含了 SSL 和 SSPI(Security Support Provider Interface)的支持。curl 是一个非常流行的开源命令行工具,用于传输数据到或...

    curl-7.62.0-win64.zip

    只需将解压缩后的文件夹“curl-7.62.0-win64-mingw”复制到一个方便访问的位置,比如“C:\Program Files”或者“C:\Users\YourUsername\bin”这样的目录。确保选择的位置已经包含在系统环境变量PATH中,这样可以在...

    curl-7.84.0-win64

    《curl-7.84.0-win64:在Windows 64位系统中的网络传输神器》 curl,一个强大的命令行工具,被广泛应用于数据的传输和下载,尤其在开发者社区中备受青睐。它的最新版本7.84.0针对Windows 64位平台进行了优化,为...

    curl-7.70.0-win64-mingw.rar

    在"curl-7.70.0-win64-mingw.rar"这个压缩包中,我们通常会找到以下组件: 1. `curl.exe`:这是cURL的可执行文件,用户可以直接在命令行中运行,执行各种数据传输任务。 2. `libcurl.dll`:这是一个动态链接库,...

    curl-7.68.0-win64-mingw.rar

    这个“curl-7.68.0-win64-mingw.rar”压缩包包含了预编译的curl版本,特别为Windows 64位操作系统设计,用户无需自行编译,可以直接在系统上运行。 1. **curl工具介绍**: - curl是一个开源项目,由丹尼尔·斯通格...

    curl.exe curl-7.53.1-win64

    **curl.exe 和 curl-7.53.1-win64: 详解命令行HTTP客户端工具** curl 是一个广泛使用的开源命令行工具,用于传输数据到或从服务器,支持多种网络协议,包括HTTP、HTTPS、FTP、FTPS等。标题中的"curl.exe curl-7.53....

    CURL-with-SSL-for-Windows

    CURL-with-SSL-for-Windows是一个强大且安全的网络工具,适用于Windows用户进行各种网络操作。了解并掌握CURL的使用,对于开发者和系统管理员来说,无论是进行日常的网络测试还是处理紧急问题,都能大大提高工作效率...

    使用curl-config配置选项

    curl-config 配置选项的使用 curl-config 是一个命令行工具,用于显示关于 curl 和 libcurl 安装的信息。下面是对 curl-config 的详细介绍: curl-config 的使用 curl-config 可以使用多种选项来显示不同的信息。...

Global site tag (gtag.js) - Google Analytics