用PHP卷曲网址?

时间:2011-03-24 17:57:18

标签: php string curl

我正在尝试从PHP中做一些卷曲

我有:

$url="http://sites.target.com/site/en/spot/mobile_fiats_results.jsp?_DARGS=/site/en/spot/mobile_fiats.jsp&asin=&dpci=".$arriPadSKU[$counter]."&zipcode=".$vZip."&city=&state=";

$curl_handle=curl_init();
curl_setopt($curl_handle,CURLOPT_URL, '$url');
curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,2);
curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,1);

$buffer = curl_exec($curl_handle);

curl_close($curl_handle);

$ url会生成一个这样的URL,它可以在浏览器中运行:

http://sites.target.com/site/en/spot/mobile_fiats_results.jsp?_DARGS=/site/en/spot/mobile_fiats.jsp&asin=&dpci=057-10-1830&zipcode=95128&city=&state=

但是我似乎没有从我的Curl调用得到结果,我不认为任何结果都会被返回。如果我查看$ buffer中的结果,我看不到像我在页面上那样的数据。

我可以不将这样的$ url设置为CURLOPT_URL吗?

我将如何构建此命令从命令行开始:

echo "iPad 2 Wi-Fi White 16GB: "; curl -s --data "_dyncharset=ISO-8859-1&asin=&dpci=057-10-1839&zipcode=95128&city=&state=" http://sites.target.com/site/en/spot/mobile_fiats_results.jsp?_DARGS=/site/en/spot/mobile_fiats.jsp

2 个答案:

答案 0 :(得分:3)

问题是你将$ url括在字符串文字中。

如果你运行curl_getinfo($ curl_handle);你会看到它请求的网址是http:// $ url,这显然是无效的。

Array
(
[url] => http://$url
[content_type] => 
[http_code] => 0
[header_size] => 0
[request_size] => 0
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 0
[namelookup_time] => 0
[connect_time] => 0
[pretransfer_time] => 0
[size_upload] => 0
[size_download] => 0
[speed_download] => 0
[speed_upload] => 0
[download_content_length] => -1
[upload_content_length] => -1
[starttransfer_time] => 0
[redirect_time] => 0
[certinfo] => Array
    (
    )
)

修改

以下是我用来测试的更新代码:

<?php

$url="http://sites.target.com/site/en/spot/mobile_fiats_results.jsp?_DARGS=/site/en/spot/mobile_fiats.jsp&asin=&dpci=057-10-1830&zipcode=95128&city=&state=";

$curl_handle=curl_init();
curl_setopt($curl_handle,CURLOPT_URL, $url);
//curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,2);
curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,1);

$buffer = curl_exec($curl_handle);

//curl_close($curl_handle);

print $buffer."\n";

print_r(curl_getinfo($curl_handle));
?>

这对我有用。但是,我看到的唯一可能阻止您接收数据的另一个问题是您的连接超时非常低。尝试将其设置得更高。

同样,上面的代码确实有效。

再次更新

您收到错误的原因是因为目标站点检查有效的用户代理。

类似的东西:

curl_setopt($curl_handle, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.15) Gecko/20110303 Ubuntu/10.04 (lucid) Firefox/3.6.15");

工作得很好。

答案 1 :(得分:1)

尝试

curl_setopt($curl_handle,CURLOPT_URL, $url);

而不是

curl_setopt($curl_handle,CURLOPT_URL, '$url');