【问题标题】:making post requests by curl通过 curl 发出帖子请求
【发布时间】:2015-03-02 07:40:19
【问题描述】:

嗨,我编写了这个脚本来获取网站的 html,但是我看到“无效请求”错误,但是当我创建一个 html 表单并提交它时,我没有问题,有什么问题吗?这是我的 php 代码:

<?php
$url = 'http://convert2mp3.net/en/index.php?p=convert';
$fields = array(
                        'url' => urlencode("www.youtube.com/watch?v=ntSBKPkk4m4"),
                        'format' => urlencode("3gp")
                );

//url-ify the data for the POST
$fields_string="";
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string, '&');

//open connection
$ch = curl_init();

//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_AUTOREFERER,true);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);

//execute post
$result = curl_exec($ch);

//close connection
curl_close($ch);
?>

【问题讨论】:

    标签: php curl web


    【解决方案1】:

    CURLOPT_POST 的值应该是布尔值,而不是您设置的 int。

    试试这个,如果$fields 可以是动态的,或者只是将其设置为布尔值true

    curl_setopt($ch,CURLOPT_POST, count($fields) &gt; 0);

    另外,您为什么要自己构建 POST 字段?只需将整个数组传递给CURLOPT_POSTFIELDS

    $fields = array(
          'url' => "www.youtube.com/watch?v=ntSBKPkk4m4",
          'format' => "3gp"
    );
    curl_setopt($ch,CURLOPT_POSTFIELDS, $fields);
    

    【讨论】:

      【解决方案2】:

      你不会成功完成你的任务,因为它们将源 IP 地址与他们提供的对话的密钥相关联,所以当你在他们的 CDN 中获得直接下载链接后,你的客户将无法下载它,因为相关的ip地址就是你的web服务器的ip。

      【讨论】:

        猜你喜欢
        • 2018-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-11
        • 2017-11-21
        • 2018-06-21
        • 2017-04-23
        • 1970-01-01
        相关资源
        最近更新 更多