Bitly API缩短URL成功但原长URL错误技术咨询
解决Bitly API生成短链接对应原URL错误的问题
看起来你遇到的问题根源出在URL参数分隔符的错误使用上,咱们一步步拆解:
问题分析
你的代码里构建Bitly API请求URL时,用了HTML实体&来分隔各个参数:
$bitly = 'http://api.bit.ly/shorten?version='.$version.'&longUrl='.urlencode($url).'&login='.$login.'&apiKey='.$appkey.'&format='.$format;
&是HTML中用来转义&的实体,但在直接发送HTTP请求的URL里,参数分隔符必须是原始的&。当你用&时,Bitly的API会把&后面的内容(比如login=xxx)当成longUrl参数的一部分,最终生成的短链接指向的就是原URL + 多余的API参数,这就导致了原长URL错误。
修复方案
把所有的&替换成普通的&,修正后的代码片段:
function make_bitly_url($url,$login,$appkey,$format = 'xml',$version = '2.0.1') { // 用&分隔参数,而不是& $bitly = 'http://api.bit.ly/shorten?version='.$version.'&longUrl='.urlencode($url).'&login='.$login.'&apiKey='.$appkey.'&format='.$format; $response = file_get_contents($bitly); // 后续解析逻辑... }
额外优化建议
另外,file_get_contents依赖PHP的allow_url_fopen配置,如果这个配置被关闭,你的代码就会失效。更可靠的方式是用cURL来发送请求,兼容性更好:
function make_bitly_url($url,$login,$appkey,$format = 'xml',$version = '2.0.1') { $bitly = 'http://api.bit.ly/shorten?version='.$version.'&longUrl='.urlencode($url).'&login='.$login.'&apiKey='.$appkey.'&format='.$format; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $bitly); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); $response = curl_exec($ch); curl_close($ch); // 后续解析逻辑... }
这样修改后,Bitly API就能正确识别各个参数,生成的短链接就会指向你原本要缩短的URL了。
内容的提问来源于stack exchange,提问作者benkmad
相关产品推荐
相关产品推荐

