php curl 獲取google短地址問題解決

咱們有個類微博應用 php

背景:測試員說其發表內容中連接應該是可點擊的短連接 linux

簡單調試發現:在本地和服務器上都能獲取到連接的短地址,惟獨內網的測試地址: 192.168.1.111:81/app shell

不能獲取短地址, apache

思考緣由,獲取短地址的流程是 匹配內容中的url,而後調用google的短址api, json

首先我沒有匹配出帶端口號的url,沒有匹配出localhost的url centos

就想偷懶直接匹配出以(http://|https://|ftp://)開頭,至空格,引號(',",‘,「,等隔斷符,包含漢字等)的部分做爲長地址的。 api

這個再說。 安全

其次改了匹配正則後,依舊不能獲取短地址,而本地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下是否是都有這個問題?

相關文章
相關標籤/搜索