【问题标题】:file_get_contents and CURL in PHPPHP 中的 file_get_contents 和 CURL
【发布时间】:2018-04-06 15:13:58
【问题描述】:

您好,我正在尝试从以下网址获取信息:

API Link

我在 PHP 中尝试了 CURL 和 file_get_contents,但无法获取请求。

当我使用 file_get_contents 时:

警告:file_get_contents(https://www.adx.ae/en/_vti_bin/ADX/svc/trading.svc/ListedCompanyOrderBook?listedCompanyID=ADIB):打开流失败:HTTP 请求失败! HTTP/1.1 400 错误请求

当我使用 CURL 时,我收到以下消息:

Error picture

下面是file_contents代码:

<?php 

    $url = "https://www.adx.ae/en/_vti_bin/ADX/svc/trading.svc/ListedCompanyOrderBook?listedCompanyID=ADIB";
    $data = file_get_contents($url);

    print_r($data);
?>

另一种方法:

<?php 

    $url = "https://www.adx.ae/en/_vti_bin/ADX/svc/trading.svc/ListedCompanyOrderBook?listedCompanyID=ADIB";


    $data = file_get_contents($url);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

    $data = curl_exec($ch);
    curl_close($ch); 

    print_r($data);
?>

【问题讨论】:

  • 我知道一些需要设置用户代理的api,如果这个api是这种情况,请尝试使用这个curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');设置用户代理
  • 刚试了一下,还是一样的错误(Request Error)
  • 考虑到网站在美学上的吸引力,我对他们的 API 存在漏洞并不感到惊讶。该请求在使用 Web 浏览器时显然有效,但在 PHP 5.0.x 到 7.2.x 中使用 file_get_contents() 时我得到 Warning: file_get_contents(https://www.adx.ae/en/_vti_bin/ADX/svc/trading.svc/ListedCompanyOrderBook?listedCompanyID=ADIB): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in...。您需要联系网站并让他们帮助您。
  • 你有解决办法吗?
  • @BeingSunny 无解

标签: php


【解决方案1】:

我认为您在 http://www.phpfiddle.org/ 上运行此代码 在该站点上,出于安全原因,curl 已禁用。如果是你的 php 服务器,那么试试这样,

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://www.adx.ae/en/_vti_bin/ADX/svc/trading.svc/ListedCompanyOrderBook?listedCompanyID=ADIB",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET"
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
?>

【讨论】:

  • 它在我的本地主机上运行。它仍然显示相同的错误。
  • 尝试在您的 php.ini 文件中将 allow_url_fopen 设置为 1
猜你喜欢
  • 2012-10-11
  • 2012-06-19
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-19
相关资源
最近更新 更多