簡體   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