美文网首页
php curl post请求超过1024字节解决方法

php curl post请求超过1024字节解决方法

作者: WanZheng | 来源:发表于2017-04-28 17:53 被阅读0次

    在yii2框架中使用CURL,报错了,错误如下:

    string(1570) "

    错误

    您所请求的网址(URL)无法获取

    当尝试进行以下请求时:

    POST /api/?do=weixinclient&handle=client HTTP/1.1

    Host: ghedu.taisha.org

    User-Agent: Yii2-Curl-Agent

    Accept: */*

    Content-Length: 1096

    Content-Type: application/x-www-form-urlencoded

    Expect: 100-continue

    发生了下列的错误:

    Invalid Request

    无效的请求

    Some aspect of the HTTP Request is invalid. Possible problems:

    HTTP 请求的某些方面是无效的。可能是下列问题:

    Missing or unknown request method

    缺少请求方式或未知的请求方式

    Missing URL

    缺少网址

    Missing HTTP Identifier (HTTP/1.0)

    缺少 HTTP 标识(HTTP/1.0)

    Request is too large

    请求命令过长

    Content-Length missing for POST or PUT requests

    POST 或 PUT 请求缺少内容长度

    Illegal character in hostname; underscores are not allowed

    主机名称中包含不合法的字符;下划线是不允许的。

    本缓存服务器管理员:webmaster.

    后来发现是post提交数据时,数据大于1024字节,解决方法如下:

    基础知识背景:

    “Expect: 100-continue”的来龙去脉:

    HTTP/1.1 协议里设计 100 (Continue) HTTP 状态码的的目的是,在客户端发送 Request Message 之前,HTTP/1.1 协议允许客户端先判定服务器是否愿意接受客户端发来的消息主体(基于 Request Headers)。

    即, Client 和 Server 在 Post (较大)数据之前,允许双方“握手”,如果匹配上了,Client 才开始发送(较大)数据。

    这么做的原因是,如果客户端直接发送请求数据,但是服务器又将该请求拒绝的话,这种行为将带来很大的资源开销。

    libcurl 发送大于1024字节数据时启用“Expect:100-continue‘特性:

    在使用 curl 做 POST 的时候,当要 POST 的数据大于1024字节的时候,curl 并不会直接就发起 POST 请求,而是会分为两步:

    1.发送一个请求,包含一个"Expect: 100-continue"头域,询问Server是否愿意接收数据;

    2.接收到Server返回的100-continue 应答以后,才把数据 POST 给Server;

    PHP Curl-library 可以主动封禁此特性:

    PHP curl 遵从 libcurl 的特性。由于不是所有 web servers 都支持这个特性,所以会产生各种各样的错误。如果你遇到了,可以用下面的命令封禁”Expect”头域:

    <?php

            //添加如下head头就可传输大于1024字节请求

            curl_setopt($ch, CURLOPT_HTTPHEADER,array('Expect:'));

    ?>

    相关文章

      网友评论

          本文标题:php curl post请求超过1024字节解决方法

          本文链接:https://www.haomeiwen.com/subject/gldazttx.html