2012-07-25 53 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没有工作。