2017-06-06 30 views
1

我們的合作伙伴已將我們的服務器IP列入白名單,因此我們可以向他們發送帶有新客戶端數據的cURL請求,但其CRM返回Error: IP address of a connected platform is not allowed可能是因爲這些標頭包含CloudFlare IP而不是我們的真實IP我們要求列入白名單的服務器。cURL使用CloudFlare時真實的服務器IP

有沒有辦法通過cURL請求來顯示我們真實的服務器IP?

curl_setopt($curl, CURLOPT_HEADER, FALSE); 
    curl_setopt($curl, CURLOPT_INTERFACE, '1.1.1.1'); 

而且:

curl_setopt($curl, CURLOPT_HTTPHEADER, array("REMOTE_ADDR: 1.1.1.1, HTTP_X_FORWARDED_FOR: 1.1.1.1")); 

編輯:

  $curl = curl_init(); 
      curl_setopt($curl, CURLOPT_URL, 'http://clients.domain.com/api'); 

      curl_setopt($curl, CURLOPT_POST, TRUE); 
      curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data)); 
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); 


      $res = curl_exec($curl); 
      return $res; 

沒有成功嘗試這樣做他們的日誌顯示了IPv6的IP,而不是IPv4服務器IP,它看起來像這樣:2a02:7aa0:1201::xxxx:xxxx經過一番調查後,似乎這個IPv6 IP由託管公司託管,白名單之後,所有事情都開始運作。 關於爲什麼cURL發出一些奇怪的IPv6而不是真正的服務器IPv4的任何想法?

+1

CloudFlare是一個入站代理,所以傳出的cURL請求不會通過CloudFlare,並將從您的服務器公開IP。嘗試捲曲顯示您的IP地址的網站,看看是否符合您提供的內容。 – drew010

+0

是否有任何公共網站可以幫助我,或者我需要自己創建一個腳本? – Ricardo

+0

使用https://ifconfig.co/並顯示服務器IP。非常奇怪,它怎麼可能在本地主機上運行,​​而不是在服務器上運行(兩個IP都被列入白名單) – Ricardo

回答

0

好的,如果clients.domain.com正在通過CF的代理,那麼你可以直接連接到服務器,並可能只是僞造主機頭。作爲PHP 7.0.7,這是可以做到

curl_setopt_array($ch,array( CURLOPT_URL=>'http://clients.domain.com/api',//to set the host CURLOPT_CONNECT_TO=>'::8.8.8.8:80' )); - 但替換:80:443如果你正在使用HTTPS

連接,並與實際服務器的IP(不CloudFlare的IP)

取代 8.8.8.8

,或者如果你沒有在PHP 7.0.7+然而,在舊版本中,你可以做

curl_setopt_array($ch,array( CURLOPT_URL=>'http://8.8.8.8/api', CURLOPT_HTTPHEADER=>array('Host: clients.domain.com') )); (再次,與真正的服務器的IP,而不是IP的CloudFlare更換8.8.8.8) 手動設置主機頭。即時通訊不知道這將正常工作與http位置重定向和CURLOPT_FOLLOWLOCATION,但是,所以你可能需要手動處理位置HTTP重定向

相關問題