繁体   English   中英

无法使用PHP + cURL从API获取数据

[英]Can't get data from API using PHP+cURL

我正在尝试从此处的Web服务(植物分类数据库)中获取一些数据。 首先,我从客户端(Javascript / AJAX)进行了尝试,但是遇到了跨域限制 然后我切换到服务器端(PHP / cURL),但是它不起作用,在请求期间我的会话中断。 我遵循了这里的建议,但是仍然行不通。

我在做什么:我通过AJAX调用文件,例如

getMOBOT.php?genus=Ocotea&sp=guianensis

getMOBOT.php文件:

<?php
include_once '../../includes_pl/db_connect.php';
include_once '../../includes_pl/functions.php';
sec_session_start();
if (isset($_GET['genus'])) {
    $genus = $_GET['genus'];
    if (isset($_GET['sp'])) {
        $sp = $_GET['sp'];
        $curl = curl_init("http://services.tropicos.org/Name/Search?name=$genus+$sp&type=wildcard&apikey=[...]&format=xml");
        $curl_response = curl_exec($curl); // error!
        curl_close($curl);
        echo "It works!";
    }
}
?>

我已经读到我需要在curl_exec尝试(其中删除了我的会话)之前关闭会话(session_write_close()),然后稍后重新打开它(session_start()),但是:

1)我有一个用于安全会话的特殊功能,称为sec_session_start()。 无论我使用它还是默认的session_start()(在curl_exec之后),它们都不起作用。

2)由于不需要在此文件中使用会话,因此删除了两个include_once行以及sec_session_start()。 仍然不起作用,我只是得到一个空白响应(HttpReq.readyState == 4,HttpReq.status!= 200和HttpReq.statusText =='')。

3)如果我在浏览器中键入URL,它将起作用,这意味着我的密钥是有效的(在此无法显示,它由[...]代替)。

编辑:更改为“ curl_exec”行:

if (!curl_exec($curl)) {
    die('Erro: "' . curl_error($curl) . '" - Code: ' . curl_errno($curl));
} else {
    echo "It works!";
}

但仍然一无所获。 请问我做错了什么?

编辑2:我在公司代理后面。 也许这是(再次!)问题?

是的,再次是代理!

我只需要添加

$proxy = 'address:port';
$proxyauth = 'user:password';
curl_setopt($curl, CURLOPT_PROXY, $proxy);
curl_setopt($curl, CURLOPT_PROXYUSERPWD, $proxyauth);

在正确的地方。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM