通过curl发布帖子请求

时间:2015-01-04 17:16:49

标签: php curl web

您好我写了这个脚本来获取网站的HTML,但我看到" Invalid Request"错误,但是当我创建一个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);
?>

2 个答案:

答案 0 :(得分:0)

CURLOPT_POST的值应该是布尔值,而不是您将其设置为的字符。

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

curl_setopt($ch,CURLOPT_POST, count($fields) > 0);

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

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

答案 1 :(得分:0)

你的任务没有成功,因为它们将源IP地址与他们提供的对话密钥联系起来,所以在你的cdn中获得直接下载链接之后,你的客户端将无法下载它,因为相关的IP地址是您的网络服务器的IP。