【问题标题】:Sending post data using curl and ajax使用 curl 和 ajax 发送帖子数据
【发布时间】:2013-04-08 11:31:22
【问题描述】:

我正在尝试使用代理脚本发送帖子数据以执行跨域 ajax。

var data = "url=http://www.fhm.com.ph/templates/100sexiestwomen2013/ajax/set.php&id=13&index=0&action=add";
$.ajax({
    url: "proxy.php",
    data: data,
    type: "POST",
    success: function(data, textStatus, jqXHR) {
        console.log('Success ' + data);

    },
    error: function(jqXHR, textStatus, errorThrown) {
        console.log('Error ' + jqXHR);
    }
});

然后我尝试解析数据以用作代理脚本中的 url 和参数。

<?php
    //set POST variables
    $url = $_POST['url'];
    unset($_POST['url']);
    $fields_string = "";
    //url-ify the data for the POST
    foreach($_POST as $key=>$value) {
            $fields_string .= $key.'='.$value.'&';
    }
    $fields_string = rtrim($fields_string,'&');
    //open connection
    $ch = curl_init();
    //set the url, number of POST vars, POST data
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_POST, 1);
    curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    //execute post
    $result = curl_exec($ch);
    //close connection
    curl_close($ch);

但事实证明它没有正确发布数据。

尝试使用邮递员,一个 chrome 扩展程序 POSTMAN。并给出正确的键值对,如data 所示。

它会在第一次提交时给你null,在第二次提交时给你selected

我错过了什么。

编辑

<?php
    //set POST variables
    $url = $_POST['url'];
//    unset($_POST['url']);
//    $fields_string = "";
//    //url-ify the data for the POST
//    foreach($_POST as $key=>$value) {
//            $fields_string .= $key.'='.$value.'&';
//    }
//    $fields_string = rtrim($fields_string,'&');
    //open connection
    $ch = curl_init();
    //set the url, number of POST vars, POST data
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_POST, 1);
    curl_setopt($ch,CURLOPT_POSTFIELDS,$_POST);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    //execute post
    $result = curl_exec($ch);
    //close connection
    curl_close($ch);

如编辑中所示,我删除了手动构建,而是使用了 POST 数组。

【问题讨论】:

    标签: php ajax json proxy cross-domain


    【解决方案1】:

    在您的 Javascript 中为 data 使用一个对象,以便 jQuery 对其进行正确编码:

    var data = {
       url: "http://www.fhm.com.ph/templates/100sexiestwomen2013/ajax/set.php&id=13",
       index: 0,
       action: "add"
    };
    

    在 PHP 中,为CURLOPT_POSTFIELDS 使用数组:

    curl_setopt($ch,CURLOPT_POSTFIELDS,$_POST);
    

    PHP 会正确编码。

    【讨论】:

      【解决方案2】:

      你必须正确编码你的数据

      var data = "url=" + encodeURIComponent("http://www.fhm.com.ph/templates/100sexiestwomen2013/ajax/set.php")+"&id=13&index=0&action=add";
      

      由于您的 url 参数包含在 url 中具有特殊含义的字符。

      【讨论】:

      • @JoeySalacHipolito 好的,我现在知道发生了什么,我以为这只是一个参数。
      • 我觉得还是不行,你也可以试试,说不定我会玩,你也想玩?
      • @JoeySalacHipolito 尝试将curl_setopt($ch,CURLOPT_POSTFIELDS,$_POST); 设置为$_POST,而不是手动尝试构建帖子正文。
      • 我会发布你的建议,但它似乎也不起作用。
      猜你喜欢
      • 1970-01-01
      • 2019-12-16
      • 1970-01-01
      • 1970-01-01
      • 2022-08-07
      • 2016-11-21
      • 1970-01-01
      • 2011-06-23
      • 2021-05-02
      相关资源
      最近更新 更多