无法使用PHP + cURL

时间:2016-02-12 19:16:15

标签: php session curl asp.net-web-api

我正在尝试从网络服务here(植物分类数据库)获取一些数据。首先我尝试从客户端(Javascript / AJAX),但得到了cross-domain restriction。然后我切换到服务器端(PHP / cURL),但它不起作用,我的会话在请求期间丢失。我遵循了here的建议,但仍然无效。

我在做什么:我通过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:我支持公司代理。也许这是(再次!)问题?

1 个答案:

答案 0 :(得分:0)

Yes, it was the proxy (again)!

I only needed to add

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

in the right places.