php curl post long string给出了404

时间:2018-01-19 14:50:49

标签: php curl

我已经尝试了差不多一个星期的时间用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)nullcurl_exec($ch)检索'okay short string'

有谁知道如何解决这个问题我开始相信这是不可能的......(?)

注意: $ long_string是来自我的本地数据库的选择查询,用json_encode编码,然后用AES-256-CBC加密,以防这有助于找到解决方案... < / p>

更新[解决方案]:

我刚删除了$array = http_build_query($array)行,并在没有加密的情况下将数据发送为json_encode,并且可以正常运行。需要将近4分钟才能得到回复,但至少可行。

1 个答案:

答案 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

More

卷曲 这是一个假设,但由于您说您正在发出POST请求,因此请增加cURL超时

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,0); 
curl_setopt($ch, CURLOPT_TIMEOUT, 400); //timeout in seconds

More