2012-07-21 131 views
1

我有一個小腳本,它使用curl並從指定的url中獲取特定內容。我已經在我的本地主機上測試過了,它工作。從https服務器獲取文件僅服務器

現在我必須從我的免費託管中檢索HTTPS專用網站(另外,證書無效,但我知道業主)的數據,但myserver既不支持CURL也不支持file_get_contents("https://other-server.com")函數。順便說一下,http://other-server.com是不可訪問的。

是否有任何方法從該服務器使用HTTPS端口獲取文件,但使用HTTP協議?或者是否有一些使用HTTPS的方法,儘管我的服務器不支持它? (這不是我的服務器,我還沒有接觸到它的配置)

+0

有很多免費託管出那裏;爲什麼不找到一個呢? – 2012-07-21 15:31:08

+0

聽起來像您可能需要找到另一個允許CURL或'file_get_contents()'訪問遠程服務器的主機。 (也許建議遠程服務器所有者更新他們的SSL證書。) – 2012-07-21 15:39:51

+0

你可以試試'wget https:// other-server.com' ...但是這聽起來像這個特定的主機不希望你出站連接。找到一個允許它。 – phatfingers 2012-07-21 15:59:47

回答

2

試試這個:

<?php 
$fp = fsockopen("ssl://other-server.com", 443, $errno, $errstr); 
if(!$fp) die($errno. " : " . $errstr); 
$send = 
"GET/HTTP/1.0\r\n". 
"Host:other-server.com\r\n". 
"Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n". 
"\r\n"; 

fwrite($fp, $send); 
while(!feof($fp)) { 
    echo fread($fp, 512); 
} 

?> 

如果你碰上「SSL傳輸不可用的錯誤消息」,看Socket transport "ssl" in PHP not enabled

如果您的主機是外部的,並且可能是免費的虛擬主機服務,那麼您運氣不佳。最好的選擇是找出哪些虛擬主機啓用了SSL傳輸 - 否則使用HTTPS協議將無法遵守。

您最後的'out'是嘗試動態地將擴展加載到PHP語言中。您將需要與主機上的PHP版本匹配的excact擴展名(dll/so),其格式與

  1. (請參閱phpinfo)匹配。 (例如,參見passthru("cat /proc/cpuinfo");)的CPU架構(例如,參見passthru("cat /proc/cpuinfo");)。 amd64,i386 ..
  2. OS'佈局',.dll用於Windows主機(IIS等),而.so用於UNIX。

要使用的功能是dl aka動態鏈接來加載庫。對於Windows主機,則需要php_openssl.dllphp_sockets.dll - ,進而爲UNIX,哎呀 - 你將需要重新編譯PHP核心..

快樂黑客:)

php-man-pages

+0

謝謝你的快速回答,但是......不:'-1219506188:無法找到套接字傳輸「ssl」 - 你忘記在配置PHP時啓用它?'。這是'ssl傳輸不可用錯誤消息',但正如我所說的,我無法修改服務器配置(另外,它具有'exec'和'system'禁用,因此wget也不起作用)。許多其他人會發現這種溶劑有用,但我很可能會發現一些其他freehosting服務器。你有什麼建議嗎? (隨着freehosting我的意思是我不會支付任何東西) – user1080431 2012-07-22 12:24:30

+0

那麼,即時通訊不會宣傳任何服務(因爲即將開始我自己的:)但一個簡單的谷歌搜索反對「免費網絡酒店」會做的伎倆,然後循環,直到我的測試腳本不會拋出錯誤。 – mschr 2012-07-22 14:55:45