我正在尝试从网络服务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:我支持公司代理。也许这是(再次!)问题?答案 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.