CURL GET请求到搜索表单


CURL GET request to an search form

$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为长,字符串给定,

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

$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

希望有帮助。: -)

第一个。cURL中没有CURLOPT_GETFIELDS

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

使用urlencode()。
但我会使用array()和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也是一样的。由于某些原因,CURLOPT_CONNECTTIMEOUT_MS在某些版本的PHP中定义不正确。可能不是你的情况,用CURLOPT_CONNECTTIMEOUT_MS代替156更清楚。