发布日期:2018-03-26
使curl跟随重定向?+ 查看更多
使curl跟随重定向?
+ 查看更多
发布日期:2018-03-26 11:19
分类:PHP
浏览次数:390
如下:
我尝试着使curl(文件传输工具)跟随重定向,但是却不能使它正确工作。有一个字符串,我想把它作为一个GET请求的参数发送到服务器并获得由此产生的URL。
例如:
我尝试着使curl(文件传输工具)跟随重定向,但是却不能使它正确工作。有一个字符串,我想把它作为一个GET请求的参数发送到服务器并获得由此产生的URL。
例如:
String = Kobold Vermin Url = www.wowhead.com/search?q=Kobold+Worker
如果你连接这个url它将会重定向到 "www.wowhead.com/npc=257",我想将这个URL返回到我的PHP代码中以便于我可以提取"npc=257"并且使用它。
现在的代码如下:
我猜测PHP在外部重定向发生之前就返回了结果,我怎样才能解决这个问题呢?
现在的代码如下:
function npcID($name) { $urltopost = "http://www.wowhead.com/search?q=" . $name; $ch = curl_init(); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"); curl_setopt($ch, CURLOPT_URL, $urltopost); curl_setopt($ch, CURLOPT_REFERER, "http://www.wowhead.com"); curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type:application/x-www-form-urlencoded")); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); return curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); }然而这个代码返回的结果是www.wowhead.com/search?q=Kobold+Worker而不是www.wowhead.com/npc=257。
我猜测PHP在外部重定向发生之前就返回了结果,我怎样才能解决这个问题呢?
回答
使Curl跟随重定向,需要设置 CURLOPT_FOLLOWLOCATION 选项:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);此外,你并没有实际执行Curl。试一试:
curl_exec($ch);curl_exec() 在设置 curl_setopt() 选项之后,调用 curl_getinfo() 之前使用。
如果仅仅是想获得重定向之后的地址,可以只使用Curl来抓取报文头,然后从中提取地址。我建议你看看[[http://zzz.rezo.net/HowTo-Expand-Short-URLs.html]]。
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); $a = curl_exec($ch); if(preg_match('#Location: (.*)#', $a, $r)) $l = trim($r[1]);