php curl 获取google短地址问题解决

我们有个类微博应用

背景:测试员说其发表内容中链接应该是可点击的短链接

简单调试发现:在本地和服务器上都能获取到链接的短地址,唯独内网的测试地址: 192.168.1.111:81/app

不能获取短地址,

思考原因,获取短地址的流程是 匹配内容中的url,然后调用google的短址api,

首先我没有匹配出带端口号的url,没有匹配出localhost的url

就想偷懒直接匹配出以(http://|https://|ftp://)开头,至空格,引号(',",‘,“,等隔断符,包含汉字等)的部分作为长地址的。

这个再说。

其次改了匹配正则后,依旧不能获取短地址,而本地apache和服务器上的apache能获取得到,估计问题出在curl_exec上,打印出curl的错误信息为”Could not resolve 谷歌api的地址“

获取google短址的代码网上狠多,以下为调试代码

function getGoogleUrl($url) { 
        //This is the URL you want to shorten
        $longUrl =$url;
        $apiKey = googlToken($url);
        $postData = array('longUrl' => $longUrl, 
                          'key' => $apiKey);
        $jsonData = json_encode($postData);
        $curlObj = curl_init();
        curl_setopt($curlObj, CURLOPT_URL, 'https://www.googleapis.com/urlshortener/v1/url');
        curl_setopt($curlObj, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curlObj, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($curlObj, CURLOPT_HEADER, 0);
        curl_setopt($curlObj, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
        curl_setopt($curlObj, CURLOPT_POST, 1);
        curl_setopt($curlObj, CURLOPT_POSTFIELDS, $jsonData); 
        $shorturl = curl_exec($curlObj);   
        if($shorturl === false){
             $infor = curl_getinfo($curlObj);
	     var_dump($infor);
	     var_dump(curl_error($curlObj));
	}
       return $shorturl; 
 }

问题是不能解析谷歌的网址,以为dns等有问题,直接在命令窗户口中能curl url的

抓破脑壳,想到以为是selinux 的问题,想去关闭一下,结果是selinux早已被我关了,好没安全感。

网上搜各种关键字,包括http://stackoverflow.com/ 设置了各种参数,未果,依旧是不能解析

最后查到有人说81端口非默认的80端口,centos会不让其访问外网,是通过iptables来设置规则的就对照这改了

-A INPUT -p tcp -m state -m tcp --dport 81 --state NEW -j ACCEPT

#allow 81 to curl
-A OUTPUT -p tcp --sport 81 -j ACCEPT
  如上 之前只有input ,现在加上output 至于各种参数的意义没有细究,说不出是啥意思。

重启了iptables服务,短地址还是不行,只好重启httpd,这下貌似ok

至于到底问题在哪,还没弄明白,希望高人解释。

就比如你把网站放在了一个非80端口访问,然后该应用需要去抓取网络上的数据,在linux下是不是都有这个问题?

 

 

 

 

你可能感兴趣的:(Google,curl,resolve,could,not,短地址)