curl POST错误:请求的URL返回错误:413

时间:2012-04-10 23:30:48

标签: php curl

我环顾四周,无法找到解决问题的解决方案。我收到以下错误:“请求的URL返回错误:413。”

我通过HTTPS将一些信息通过curl和PHP发布到URL。我被告知我必须传递“Content-Length”以及我的请求,因为目的地是https而不是http。

这是我正在使用的代码:

    $user = '11111111111111111';
    $books = array(111);

    $data = array("action" => "books-shared", "userID" => $user, "bookIDs" => $books);
    $data_string = array('json'=>json_encode($data));
    $target_url = 'https://www.test.com/test.php'; // fake URL of course

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
    curl_setopt($ch, CURLOPT_URL,$target_url);                                                                  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FAILONERROR, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
        'Content-Type: application/json',                                                                                
        'Content-Length: ' . strlen($data_string))                                       
    );                                                                                                                   

    $api = curl_exec($ch);

我的strlen($ data_string)命令返回的值为5,远小于$ data_string的实际长度,后者要长得多。我认为这是问题,除非有人认为它可能是由其他东西引起的。

1 个答案:

答案 0 :(得分:1)

这是我最终的结果:

    $user = '11111111111111111';
    $books = array(111);

    $data = array("action" => "books-shared", "userID" => $user, "bookIDs" => $books);
    $data_string = array('json'=>json_encode($data));

    $target_url = 'https://www.test.com/test.php'; // fake URL of course

    $ch = curl_init();
    if (!$ch) {
        die("Couldn't initialize a cURL handle");
    }       
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_VERBOSE, true);        
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
    curl_setopt($ch, CURLOPT_URL, $target_url);                                                                  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FAILONERROR, true);                                                                                                                  

    $api = curl_exec($ch);

没有SSL或大小错误,似乎工作正常。