使用curl和ajax发送帖子数据

时间:2013-04-16 06:57:04

标签: php ajax json proxy cross-domain

我正在尝试使用代理脚本发送帖子数据来执行跨域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);

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

尝试使用postman,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阵列。

2 个答案:

答案 0 :(得分:2)

在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将对此进行正确编码。

答案 1 :(得分:1)

您必须正确编码数据

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

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