Drupal 7 PHP cURL 未执行
Drupal 7 PHP cURL not executing
我正在尝试通过 cURL POST 将 drupal 网络表单的结果发送给第三方。我的 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编码URL本身。该函数适用于您在 url 的查询部分(?之后的部分)
中传递的数据
- 您的 url 中似乎缺少
?
。
- 我认为您在组装 Post 数据时存在一些逻辑问题。首先,您要对每个 post 字段的所有 $result->data 进行编码。您可能希望一次只包含一个字段。其次,您将一个字符串传递给 http_build_query(),它需要一个数组或一个对象。或许您可以重构以将 $post 用作数组,这可能更易于调试。阅读 cURL and http_build_query 的文档,了解一切的期望和作用。例如,如果将数组传递给 curl_setopt for CURLOPT_POSTFIELDS.
,cURL 扩展可以为您做很多工作
我正在尝试通过 cURL POST 将 drupal 网络表单的结果发送给第三方。我的 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编码URL本身。该函数适用于您在 url 的查询部分(?之后的部分) 中传递的数据
- 您的 url 中似乎缺少
?
。 - 我认为您在组装 Post 数据时存在一些逻辑问题。首先,您要对每个 post 字段的所有 $result->data 进行编码。您可能希望一次只包含一个字段。其次,您将一个字符串传递给 http_build_query(),它需要一个数组或一个对象。或许您可以重构以将 $post 用作数组,这可能更易于调试。阅读 cURL and http_build_query 的文档,了解一切的期望和作用。例如,如果将数组传递给 curl_setopt for CURLOPT_POSTFIELDS. ,cURL 扩展可以为您做很多工作