如何使用cURL发布数据?

时间:2016-09-06 19:30:37

标签: php curl

我想以url而不是boolean的形式返回响应。我从浏览器中查找标题并匹配它,但它只返回boolean(1)。是否有一些选项缺失?

 <?php

    $ch = curl_init();

    $url = 'http://www.tusfiles.net/anfossy50rrd';

// Post field and value
    $post = array(
            'op' => 'download2',
            'id' => 'anfossy50rrd',        
        'rand' => 'q56tfpiklusrizipkforyjqsykxzqlsi7ur3hyi',
            'referer' => '',    
        'method_free' => '',
            'method_premium' => '',
        'down_script' => '1'
        );

标题

   $headers = [
        'Host: www.tusfiles.net',
        'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:28.0) Gecko/20100101 Firefox/28.0',
        'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Accept-Language: en-US,en;q=0.5',
        'Accept-Encoding: gzip, deflate',
        'Cache-Control: no-cache',
        'Content-Type: application/x-www-form-urlencoded; charset=utf-8',
        'Referer: http://www.tusfiles.net/anfossy50rrd',
        'Cookie: lang=english; login=lynxpravoka; xfss=; aff=2513158; __atuvc=17%7C36; 

    __atuvs=57cf088127fd55f9004; cookiescriptaccept=visit',
        'Connection: keep-alive',
        'Upgrade-Insecure-Requests: 1'
    ];

    curl_setopt($ch, CURLOPT_URL, $url);

    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 

    curl_setopt($ch, CURLOPT_POSTFIELDS,$post);

    $server_output = curl_exec ($ch);

    print_r($server_output);

    ?>

2 个答案:

答案 0 :(得分:0)

您需要使用以下内容:

curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'X-Header-1: value1', 'X-Header-2: value2' ));

或者您也可以构建一个数组,其中键是标题名称,值当然是标题值。它看起来像这样:

$headers = array( 'Host' => 'www.tusfiles.net', 'User-Agent' => 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:28.0) Gecko/20100101 Firefox/28.0' ); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

http://www.php.net/manual/en/function.curl-setopt.php

答案 1 :(得分:0)

问题是服务器返回HTTP/1.1 302 Found HTTP重定向,期望您将请求发送到“找到”的URL。但是因为你没有CURLOPT_FOLLOWLOCATION - 你也没有手动处理重定向(也没有读取重定向标题),所以你不遵循重定向。启用CURLOPT_FOLLOWLOCATION,您应该得到回复。

另外,你几乎不应该用curl手动给出'Accept-Encoding:gzip,deflate'标题。如果实际上没有用gzip或deflate编译curl并且服务器决定使用它,那么传输将失败,此外,如果将来服务器和curl都支持更好的传输编码,它将不会被使用,因为你明确表示只支持gzip / deflate。相反,make curl会自动给出所有支持的编码,方法是给CURLOPT_ENCODING一个空字符串。

和protip:将来,要调试为什么curl传输不能按预期工作,启用CURLOPT_VERBOSE