将 JavaScript AJAX Web API 查询转换为 PHP CURL

Converting JavaScript AJAX Web API query to PHP CURL

我有一个针对我公司 arcGIS's generateToken query 的功能性 AJAX 查询,如下所示:

    var u = "CENTRAL\myusername";
    var p = "myp@ssword"; 
    var payload = {
        username: u,
        password: p,
        client: 'referer',
        referer: 'https://mycompany.com/myapp',
        expiration: '60',
        format: 'json',
    };
    var tokenUrl = 'https://gis.mycompany.com/public/tokens/generateToken';
    $.ajax({
        url: tokenUrl,
        type: "POST",
        crossDomain: true,
        dataType: 'text',
        data: payload,
        success: function(data){
            token = data;
            console.log(token)
        }
    });

我需要将它重写到我的 PHP 后端 - 然而,curl_getinfo 说我有一个 HTTP200 但 $result 总是

Invalid request Usage: https://gis.mycompany.com/arcgis/tokens?request=gettoken&username=username&password=password& Usage: https://gis.mycompany.com/arcgis/tokens/generateToken?username=username&password=password& Usage: https://gis.mycompany.com/arcgis/tokens/gettoken.html

从终点。这是我的实现:

    $GISuser = "CENTRAL\myusername";
    $GISpassword = "myp@ssword";
    $GISurl = "https://gis.mycompany.com/public/tokens/generateToken";
    $payload = array(
        "username" => $GISuser,
        "password" => $GISpassword,
        "client" => "referer",
        "referer" => 'https://mycompany.com/myapp',
        "expiration" => "60",
        "format" => "json"
    );

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
    curl_setopt($curl, CURLOPT_URL, $GISurl);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

    $result = curl_exec($curl);
    curl_close($curl);

    echo $result;

AJAX 和 CURL web API 查询之间有区别吗?

您可以尝试将 $payload 换行为:

curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($payload));

...因为传递数组可以将 enctype 更改为您的 API 不喜欢的多部分。

来自 PHP 页面: *注意:将数组传递给 CURLOPT_POSTFIELDS 会将数据编码为 multipart/form-data,而传递 URL 编码的字符串会将数据编码为 application/x-www-form-urlencoded.