我试图通过cURL POST向第三方发送drupal web表单的结果。我的cURL函数不工作,我正在努力寻找我的错误。我以前从未使用过cURL,所以我不太确定它是如何工作的,甚至不知道它到底做了什么。
据我所知,我正在拼凑要正确发送的URL,发送只是失败。
<?php
module_load_include('inc','webform','includes/webform.submissions');
$uri = $_SERVER[REQUEST_URI];
$sid = substr($uri, 20);
$submission = webform_get_submissions(array('sid' => $sid));
$nid = $submission[$sid]->nid;
$sql = db_select('webform_submitted_data', 'w');
$sql->fields('w', array('sid','cid','data'))
->condition('sid', $sid)
->condition('cid', array(1,2,3,4,5,6,7,8),'IN');
$results = $sql->execute();
$post = NULL;
$url = urlencode('http://ulm.datamark.com/services/lead_submission&client_code=DAV4516&source_code=DAVNCU');
foreach($results as $result)
{
if ($result->cid == 1) {
$post .= "first_name=" . urlencode($result->data);
} else if ($result->cid == 2) {
$post .= "&last_name=" . urlencode($result->data);
} else if ($result->cid == 3) {
$post .= "&email=" . urlencode($result->data);
} else if ($result->cid == 4) {
$post .= "&phone=" . urlencode($result->data);
} else if ($result->cid == 5) {
$who = $result->data;
} else if ($result->cid == 6) {
$post .= "&phone2=" . urlencode($result->data);
} else if ($result->cid == 8) {
$post .= "&comments=" . urlencode($result->data);
}
}
dsm($who);
dsm($url.$post);
if ($who == "fs")
{
$defaults = array(
CURLOPT_POST => 1,
CURLOPT_HEADER => 0,
CURLOPT_URL => $url,
CURLOPT_FRESH_CONNECT => 1,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_FORBID_REUSE => 1,
CURLOPT_TIMEOUT => 4,
CURLOPT_POSTFIELDS => http_build_query($post)
);
$ch = curl_init();
curl_setopt_array($ch, ($defaults));
if( ! $result = curl_exec($ch))
{
echo "Something went wrong";
trigger_error(curl_error($ch));
}
curl_close($ch);
?>
我的眼睛看到了几个问题:
- 不要对URL本身进行urlencode。该函数用于在url的Query部分中传递的数据(后面的部分?)
- 看起来你的url中缺少
?
。 - 我认为你在Post数据的组装中有一些逻辑问题。首先,对每个post字段的所有$result->数据进行编码。您可能希望一次只包含一个字段。其次,将一个字符串传递给http_build_query(),它需要一个数组或一个对象。也许您可以将$post重构为一个数组,这可能使调试更容易。阅读cURL和http_build_query的文档,了解它们的期望和作用。例如,cURL扩展可以为你做很多工作,如果你为CURLOPT_POSTFIELDS传递一个数组到curl_setopt。