2012-07-25 48 views
1

我試圖通過PHP連接到IIS Web服務器上的smartystreets API(liveaddress)。我從這裏複製了file_get_contents和cURL示例:SmartyStreets github PHP examples。它們都不工作。如果我將URL直接粘貼到瀏覽器中,它確實可行。 file_get_contents示例返回:嘗試所有已知解決方案後無法獲取file_get_contents或cURL

Warning: file_get_contents(https://api.qualifiedaddress.com/street-address/?street=817+Quail+Ln.+%2312+bakersfield%2C+ca+93309&auth-token=5Nk1%2FA) [function.file-get-contents]: failed to open stream: No such file or directory in C:\Inetpub\includes\myclass.php on line 28 

我已經在phpinfo中確認allow_url_fopen已打開。我也嘗試設置一個user_agent。但是,這不起作用。

cURL示例返回false。

這可能是IIS的東西?或者可能是由於防火牆設置?如果是這樣,我該如何找出打開的端口?還有其他的可能嗎?謝謝!

+0

我在下面回答了我自己的問題(這是一個與在API中使用ssl有關的問題),但保羅回答比我好。如果您遇到類似的問題,您可能需要閱讀這兩個文件才能獲得解決問題的完整路徑。 – dallin 2012-07-28 20:02:11

回答

2

試試這個。通常,獲得SSLcURL這是某種類型的min./default/simple/widespread;)配置用於API的SSL是足夠的,但無論如何它取決於提供商的SSL配置。

curl_setopt($ch, CURLOPT_SSLVERSION, 3); // OpenSSL issue 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Wildcard certificate 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 

如果它不起作用,請嘗試瞭解smth。約SSL configuration of your provider,你一定會找到解決方案。

0

該web服務需要授權。

有關如何通過身份驗證詳細信息的詳細信息,請參見curl_setopt manual

+0

據我所知,除了唯一的身份驗證令牌之外,我沒有授權。在API文檔中沒有任何關於進一步授權的信息,如果我將完全相同的URL粘貼到瀏覽器中,它可以正常工作並返回JSON。如果需要進一步授權,爲什麼它不在示例中?我在這裏錯過了什麼嗎? – dallin 2012-07-25 18:53:50

+0

複製該網址,並嘗試在瀏覽器中得到它......它說「401需要授權」... – poncha 2012-07-26 03:43:52

+1

啊,那是因爲我改變了認證令牌。我不認爲這是與互聯網分享是一個好主意;) – dallin 2012-07-28 19:57:36

0

我終於得到了cURL的工作。問題在於該鏈接正在使用SSL(網址中的https)。我通過迴應curl_error($ ch)發現了這一點;我加入這一個捲曲選項它完美地工作:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 

我不知道,如果是與此相關的或不是理由的file_get_contents沒有工作。