Curl 发布表单并获取结果

Curl 发布表单并获取结果

我找到了这个网站http://www.fonefinder.net/findome.php,通过号码定位电话提供商(例如:http://www.fonefinder.net/findome.php?npa=562&nxx=866&thoublock=1666) 显示 VERIZON CALIFORNIA INC.-CA (GTE)。我尝试使用 linux curl 和 php curl 获取结果,但收到“您必须输入更多数字。” 好像没有发送任何数据。我尝试了以下方法,但不起作用。哪里出了问题,我该如何获取结果?

curl --data "npa=562&nxx=866&thoublock=1666&usaquerytype"  \
     link --header "Content-Type:text/html"

还尝试了 x-www-form 和以下脚本:

<?
//extract data from the post
extract($_POST);

//set POST variables
$url = 'link';
$fields = array('npa' => urlencode(544), );

//url-ify the data for the POST
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_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);

//execute post
$result = curl_exec($ch);
echo "$result";
//close connection
curl_close($ch);
?>

所有方法的结果都是“您必须输入更多数字。”

答案1

您的请求使用 GET 方法,这意味着查询被编码到 URI 中。

请参阅此处了解更多信息 http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9

因此您需要生成查询字符串并将其附加到 url,例如 findome.php?npa=562&nxx=866 ...

<?php
$url = "http://www.fonefinder.net/findome.php";
$query = array('npa'=>562,'nxx'=>866,'thoublock'=>1666,'usaquerytype');
$url .= sprintf("?%s", http_build_query($query, '', '&'));
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);
curl_close($ch);
echo "$result";
?>

答案2

(我对您的消息进行了一些格式化,以使其更具可读性。)

如果您执行上述操作,您也会在浏览器中收到相同的错误消息,因此这不是 cURL 的错误。

我想知道你在哪里找到的格式?如果你手动执行,那么查询只是一个普通的 GET:

http://www.spokeo.com/reverse-phone-lookup/search?p=1234567890&sea2=t104

其中123456790是 10 位电话号码。我怀疑sea2是会话标识符,可以从上一页获得。

编辑:有点不同。请求甚至更简单:

GET /search?q=1234567890

这会出现错误 302(重定位),您的程序必须处理该错误并对我传递的第一个 URL 执行 GET 操作。

相关内容