【问题标题】:Can't get file_get_contents or cURL to work after trying all known solutions尝试所有已知解决方案后无法使 file_get_contents 或 cURL 工作
【发布时间】:2012-07-23 18:22:14
【问题描述】:

我正在尝试通过 PHP 连接到 IIS Web 服务器上的 smartystreets API (liveaddress)。我从这里复制了 file_get_contents 和 cURL 示例:SmartyStreets github PHP examples。它们都不起作用。如果我将 URL 直接粘贴到浏览器中,它确实有效。 file_get_contents 示例返回:

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 有关吗?或者可能是由于防火墙设置?如果是这样,我如何找出要打开的端口?还有其他可能吗?谢谢!

【问题讨论】:

  • 我在下面回答了我自己的问题(这是在 api 中使用 ssl 的问题),但 Paul 回答得比我好。如果您遇到类似的问题,您可能需要阅读这两篇文章以获取我解决问题的完整路径。

标签: php curl file-get-contents


【解决方案1】:

试试这个。通常让SSLcURL 一起工作就足够了(这是某种最小/默认/简单/广泛的;) 用于 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,你一定会找到解决办法的。

【讨论】:

    【解决方案2】:

    该网络服务需要授权。

    有关如何通过身份验证的详细信息,请参阅curl_setopt manual

    【讨论】:

    • 据我所知,除了我通过的唯一 auth-token 之外没有任何授权。 API 文档中没有任何关于进一步授权的信息,如果我将完全相同的 URL 粘贴到浏览器中,它可以正常工作并带回 JSON。如果需要进一步授权,为什么不在示例中?我在这里错过了什么吗?
    • 复制该网址并尝试在浏览器中访问它...它说“需要401授权”...
    • 啊,那是因为我更改了 auth-token。我不认为与互联网分享它是一个好主意;)
    【解决方案3】:

    我终于让 cURL 工作了。问题是该链接正在使用 SSL(网址中的 https)。我通过回显 curl_error($ch); 发现了这一点。我添加了这个 cURL 选项,它运行良好:

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    

    我不确定 file_get_contents 不起作用的原因是否与此有关。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-22
      • 2018-05-27
      • 1970-01-01
      • 2017-03-28
      • 2019-08-16
      • 2015-08-28
      • 1970-01-01
      相关资源
      最近更新 更多