1

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

我通过 curl 和 PHP 将一些信息发布到通过 HTTPS 的 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 的实际长度要小得多,后者要长得多。我认为这是问题所在,除非有人认为它可能是由其他原因引起的。

4

1 回答 1

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 或大小错误,它似乎工作正常。

于 2012-04-11T22:13:26.773 回答