【发布时间】:2016-02-12 19:16:14
【问题描述】:
我正在尝试从网络服务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 and HttpReq.statusText == '')。
3) 如果我在浏览器中输入 URL,它可以工作,这意味着我的密钥是有效的(我不能在这里显示,它被 [...] 代替)。
编辑:将“curl_exec”行更改为:
if (!curl_exec($curl)) {
die('Erro: "' . curl_error($curl) . '" - Code: ' . curl_errno($curl));
} else {
echo "It works!";
}
但仍然一无所获。请问我做错了什么?
编辑 2:我支持公司代理。也许这是(再次!)问题?
【问题讨论】:
标签: php session curl asp.net-web-api