同时cURL HTTP是否请求答案?

时间:2011-01-20 21:56:25

标签: php curl

首先让我从强制性的“我有点像一个菜鸟,愚蠢的问题等”开始。我有一些我想要完成的事情,需要一些帮助来研究正确的解决方案。我有几个通过cURL处理器跨域传输的Web表单(由于CRM问题,真正的表单处理器必须驻留在一个单独的域中)所以我可以使用jQuery的AJAX函数根据响应显示相应的消息。

这很容易。我们现在已经切换了ESP,并且只想将电子邮件地址和名称发送到我们的营销数据库中。所以包含在一个表格中的是很多信息,但我们只需要将这两个项目发送到我们的ESP。

是否应该使用cURL脚本将信息发送到我们的跨域表单处理器或处理器本身?如果我不清楚这一点,请告诉我,我会扩展。我知道在两个目的地“虹吸”形成并不理想,但这个决定是在我头脑中做出的。下面是我当前的一个cURL脚本的示例。

<?php

$url = 'myremoteserver.com';
$referred_by_text = $_POST["referred_by_text"];
$broker_text = $_POST["broker_text"];
$email1 = $_POST["email1"];
$radiobutton = $_POST["radiobutton"];
$trade_futures = $_POST["trade_futures"];
$trade_fx = $_POST["trade_fx"];
$trade_equities = $_POST["trade_equities"];

$fields = array(
'referred_by_text'=>urlencode($referred_by_text),
'broker_text'=>urlencode($broker_text),
'email1'=>urlencode($email1),
'radiobutton'=>urlencode($radiobutton),
'trade_futures'=>urlencode($trade_futures),
'trade_fx'=>urlencode($trade_fx),
'trade_equities'=>urlencode($trade_equities)
);

foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
$fields_string = rtrim($fields_string,'& ');

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$output = curl_exec($ch);
echo $output;
curl_close($ch);

?>

1 个答案:

答案 0 :(得分:0)

因此营销数据库位于第三个不同的域,与原始Web主机和第二个CRM域分开?并且所有3个域都托管在不同的服务器上?

如果在CRM服务器脚本上,您可以在1个cURL请求中执行此操作,在处理POST变量后,您执行标头重定向,将POST变量作为GET变量附加到ESP服务器URL。但这可能不是一个好主意。而且你不能做2个“同时”的请求,你只能一个接一个地做。

如果是我,我会在ESP服务器上写一个chronjob,以便从当天的CRM数据库中获取所有新的/修改过的记录,但这可能不适用于您的情况。

还有一个建议,如果您的表单字段名称始终与提交的var名称匹配,则可以替换:

$referred_by_text = $_POST["referred_by_text"];
$broker_text = $_POST["broker_text"];
$email1 = $_POST["email1"];
$radiobutton = $_POST["radiobutton"];
$trade_futures = $_POST["trade_futures"];
$trade_fx = $_POST["trade_fx"];
$trade_equities = $_POST["trade_equities"];

$fields = array(
'referred_by_text'=>urlencode($referred_by_text),
'broker_text'=>urlencode($broker_text),
'email1'=>urlencode($email1),
'radiobutton'=>urlencode($radiobutton),
'trade_futures'=>urlencode($trade_futures),
'trade_fx'=>urlencode($trade_fx),
'trade_equities'=>urlencode($trade_equities)
);

foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
$fields_string = rtrim($fields_string,'& ');

有这样的事情:

$allowed_vars = array("referred_by_text","broker_text","email1","radiobutton","trade_futures","trade_fx","trade_equities");
$outputarray = array();

foreach($_POST as $key => $value){
    if(in_array($key,$allowed_vars)){
        $outputarray[] = $key.'='.urlencode($value);
    }
}
$fields_string = implode('&',$outputarray);

这将使添加或修改字段名称变得更加容易,因为您只更改了允许数组中的实例而不是多个位置。 in_array可以保护您免受额外不需要的POST值的影响,而内爆将加入您的名称/值对,而无需删除最后一个&amp;