CURL GET请求搜索表单

时间:2013-05-06 04:07:15

标签: php curl

$url3 = "http://cocatalog.loc.gov/cgi-bin/Pwebrecon.cgi?DB=local&PAGE=First";
$ch3 = curl_init();                   //2nd curl to search ASIN 
curl_setopt($ch3, CURLOPT_URL,$url3);
curl_setopt($ch3, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch3, CURLOPT_TIMEOUT, 15);
curl_setopt($ch3, 156, 2500);
curl_setopt($ch3, CURLOPT_GETFIELDS,"?Search_Arg=$Kindletitle&Search_Code=TALL&CNT=25&HIST=1");
curl_setopt($ch3, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch3, CURLOPT_FOLLOWLOCATION, true);
$copyrightrecordresponse = curl_exec($ch3);
curl_close($ch3);

尝试对以下搜索表单执行GET请求但我收到错误 curl_setopt()期望参数2为long,给定字符串,

2 个答案:

答案 0 :(得分:0)

也许我错过了一些东西,但为什么不事先形成请求网址?不完全确定你想要完成什么,但看看这是否适合你:

$title='teste';

$url3="http://cocatalog.loc.gov/cgi-bin/Pwebrecon.cgi?Search_Arg=$title&Search_Code=TALL&CNT=25&HIST=1";

$ch3 = curl_init();                   //2nd curl to search ASIN 
curl_setopt($ch3, CURLOPT_URL,$url3);
curl_setopt($ch3, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch3, CURLOPT_TIMEOUT, 15);
curl_setopt($ch3, 156, 2500);

curl_setopt($ch3,CURLOPT_HTTPGET,true);
curl_setopt($ch3, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch3, CURLOPT_FOLLOWLOCATION, true);
$copy= curl_exec($ch3);
curl_close($ch3);

echo($copy);

这将返回存储在$ title变量中的字符串的搜索结果。

请参阅有关curl选项的文档中的参考链接:

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

希望它有所帮助。 : - )

答案 1 :(得分:0)

<强>第一即可。 cURL 中没有CURLOPT_GETFIELDS。

<强>第二即可。 $ Kindletitle可能包含URL分隔符。所以,避免这样的事情:
"?Search_Arg=$Kindletitle&Search_Code=TALL&CNT=25&HIST=1"

使用urlencode()。
但是我使用了数组()和http_build_query():

$data = array(
    'Search_Arg'  => $Kindletitle,
    'Search_Code' => 'TALL',
    'CNT'         => 25,
    'HIST'        => '1'
);    
$query = http_build_query($data);

GET使用:

$url = 'http://example.com?'.$query;
curl_setopt($ch3, CURLOPT_URL, $url);

或使用POST

curl_setopt($ch3, CURLOPT_POST, true );
curl_setopt($ch3, CURLOPT_POSTFIELDS, $query );

关于curl_setopt($ch3, 156, 2500);156的注意事项 对于Windows平台,CURLOPT_CONNECTTIMEOUT_MS等于它。出于某种原因,在某些版本的PHP中,CURLOPT_CONNECTTIMEOUT_MS定义不正确。可能不是您的情况,请使用CURLOPT_CONNECTTIMEOUT_MS代替156