PHP CURL库之GET、POST数据大小限制导致请求失败解决方案

本文介绍了一种在使用PHP的CURL库时遇到的问题,当URL长度超过1024字节时,CURL不会返回响应内容。通过添加一个特殊的Header解决了这一问题,并提供了修改后的CURLGET函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景概述:
我有一个脚本,里面定义了一个方法,方法里面是一个CURL GET的封装。在使用过程中一起正常。突然发现有一天一直报失败警报。于是,我去查看代码,发现没有任何问题。最后通过百度,发现这个PHP的CURL库并默认情况下,当发送的数据超过1024字节的时候,不会返回响应的内容。这就是问题的所在。 封装的CURL GET函数如下:

function sendRequestGame($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    $retData = curl_exec( $ch );
    curl_close( $ch );
    return $retData;
}

我相信这段代码极少有人会看出来问题。因为,你测试此函数请求一个URL,是能正常收到返回的。但是,假如这个URL的长度超过了1024个字节长度。试想一下?还会正常返回么?答案是否定的。因为,PHP CURL库默认1024字节的长度不等待数据的返回。只要将以上函数修改为如下即可解决这此问题。

function sendRequestGame($url)
{
    $header = array('Expect:');
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    $retData = curl_exec( $ch );
    curl_close( $ch );
    return $retData;
}

嗯。现在这个函数,我增加了一个Header。但是,注意,这个Header不能与以下Header一起使用:

'Content-Type:text/html;charset=UTF-8'

否则,依然会接收不到响应的数据。更深层次的原因我也没有去深入研究。

这个问题是在4399工作时与游戏工作室对接API时遇到的问题。这个问题估计与鸟哥提到的CURL BUG一样:《Curl的毫秒超时的一个”Bug”》

作者寒冰遇到这个问题的是,也没有精力从底层分析问题所在。鸟哥的文章从底层分析了原因。大家注意就是了。

原网址:http://blog.sina.com.cn/s/blog_7ae4296f0101oh6j.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值