【问题标题】:Converting JavaScript AJAX Web API query to PHP CURL将 JavaScript AJAX Web API 查询转换为 PHP CURL
【发布时间】:2018-06-17 21:27:51
【问题描述】:

我有一个针对我公司的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 始终是

请求无效 用法:https://gis.mycompany.com/arcgis/tokens?request=gettoken&username=username&password=password& 用法:https://gis.mycompany.com/arcgis/tokens/generateToken?username=username&password=password& 用法: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 查询之间是否存在差异,我缺少这些查询以使其正常工作?

【问题讨论】:

  • 嗯。也许我也忽略了一些东西......但这看起来应该有效。但是你说API服务器说请求不好?这是 API 错误,还是服务器错误?你能粘贴完整的curl_error($curl) 吗?
  • 如果我不得不猜测,我会说尝试添加一个用户代理字符串。这将由进行 ajax 调用的浏览器设置,但不一定由 curl 设置
  • 更新了我的问题 - 根据curl_getinfocurl_error 似乎我确实得到了HTTP200 是空的。 $result 贴在上面。
  • 您可以尝试将 $payload 包装在 curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($payload)); ... 因为传递数组可能会将 enctype 更改为多部分(*注意:将数组传递给 CURLOPT_POSTFIELDS 会将数据编码为多部分/form-data,同时传递 URL 编码的字符串会将数据编码为 application/x-www-form-urlencoded。)
  • @IncredibleHat 就是这样,谢谢!如果您做出回答,我将投票并接受!

标签: javascript php ajax curl arcgis-js-api


【解决方案1】:

您可以尝试将 $payload 包装为:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 2015-06-13
    • 2021-08-09
    • 2016-01-08
    • 1970-01-01
    相关资源
    最近更新 更多