我已经尝试了差不多一个星期的时间用php curl post发送长字符串值但没有成功,直到我尝试Expect:
以避免Expect:100-continue
。
send_request.php脚本:
$array = array(
'value' => $short_string, # less than 1024 characters
'long_value' => $long_string, # more than 1024 characters (1400000 in my case)
);
$array = http_build_query($array);
$headers = array('Expect:');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://domain_name.com/url/to/script.php');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $array);
curl_setopt($ch, CURLOPT_TIMEOUT, 500);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
$error = curl_error($ch);
$info = curl_getinfo($ch);
curl_close($ch);
process_request.php脚本:
if($_SERVER['REQUEST_METHOD'] == 'POST'){
$response = 'okay short string';
if(isset($_POST['long_value'])){
$response = 'okay long string';
}
echo $response;
}
现在我的代码没有超出时间限制但是给了我以下内容:
[当发送短串或长串时会发生这种情况]或
curl_error($ch)
打印SSL_write() returned SYSCALL, errno= 0
并且curl_exec($ch)
从卷曲帖子请求的网址集中检索 404未找到页面的代码。
[发送短字符串时会发生这种情况]
curl_error($ch)
是null
并curl_exec($ch)
检索'okay short string'
有谁知道如何解决这个问题我开始相信这是不可能的......(?)
注意: $ long_string是来自我的本地数据库的选择查询,用json_encode
编码,然后用AES-256-CBC
加密,以防这有助于找到解决方案... < / p>
更新[解决方案]:
我刚删除了$array = http_build_query($array)
行,并在没有加密的情况下将数据发送为json_encode
,并且可以正常运行。需要将近4分钟才能得到回复,但至少可行。
答案 0 :(得分:0)
尝试增加PHP执行超时,增加php.ini。要查看php.ini的位置,请参阅phpinfo()。
max_execution_time = 60 #this is in seconds
如果您使用的是nginx: 要在后端读取时增加nginx的超时,请增加nginx配置(nginx / nginx.conf)。
proxy_read_timeout 60
卷曲 这是一个假设,但由于您说您正在发出POST请求,因此请增加cURL超时
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,0);
curl_setopt($ch, CURLOPT_TIMEOUT, 400); //timeout in seconds