我正在尝试使用Curl向URL发出POST请求,但是收到此错误?

时间:2011-02-23 12:50:48

标签: curl

ERROR:

请求实体太大 请求的资源 /check.php 不允许请求数据与POST请求,或请求中提供的数据量超过容量限制。

Whar可能是造成这个错误的原因?我认为数据大小不是原因,我知道./check.php接受POST方法。它是否像某些安全漏洞一样?

的问候, aqif

6 个答案:

答案 0 :(得分:15)

如果您真的想使用POST,那么您将按此顺序使用CURLOPT_POST和CURLOPT_POSTFIELDS。结果也很方便调试。

<?php 

$params=array(
  'a'=>'text1',
  'b'=>'text2'
);

$curl=curl_init();

curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $params);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);

$result=curl_exec($curl);

print $result;

编辑:只是一个注释,如果你想在帖子中不发送任何参数,请使用空数组。空字符串会破坏卷曲。

答案 1 :(得分:4)

不确定这是否会对任何人有所帮助,但以下是解决这个问题的原因:

我有以下内容:

    $ch = curl_init($process_url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    $results = @curl_exec($ch);

CURLOPT_POST是造成问题的原因。我的实际curl不包含任何$ _POST变量,它只有一个$ _GET查询字符串。一旦我用CURLOPT_POST删除了这一行,一切都按预期工作。

我没有在CentOS安装上遇到这个问题,但是,我在Mac上使用OSX Lion和PHP 5.3 +

答案 2 :(得分:3)

如果您被迫发出不带参数的POST请求,可以将它们设置为空字符串或数组。这为我解决了这个问题。

无论

curl_setopt($ch, CURLOPT_POSTFIELDS, '');

或者

curl_setopt($ch, CURLOPT_POSTFIELDS, array());

请注意,后者会隐式重置content-type标头。

答案 3 :(得分:2)

我遇到了与WFetch类似的问题。我自己指定了Content-Length标头,结果发现WFetch正在使用自己的Content-Length标头。删除我的Content-Length标题后,一切正常。 Curl也可以这样吗?

答案 4 :(得分:1)

那么,错误响应绝对不是一种安全措施。关于413 Request Entity Too Large

RFC 2616说了这个问题
  

服务器拒绝处理请求,因为请求实体大于服务器愿意或能够处理的请求实体。服务器可以关闭连接以防止客户端继续请求。

验证您的尺寸不是问题吗?许多webhost都有一个相当小的POST上传限制(很少有东西会抛出413)。

否则,可能是PHP脚本本身返回此响应(通过header())。

答案 5 :(得分:1)

如果使用curl_exec,则必须设置

curl_setopt($ch, CURLOPT_POSTFIELDS, **array()**);

如果您错过了,那么您将遇到错误413请求实体太大