使用cURL和PHP进行POST请求

时间:2014-09-11 13:44:23

标签: php curl

很抱歉,如果这真的很模糊,我对cURL和API的互动都是新手。

目前,我创建了一个URL,其中包含所需的身份验证详细信息,可访问API(点播程序)并使用给定ID显示地址簿中的联系人。

$auth_url = 'https://' . $apiemail .':' . $apipassword . '@api.dotmailer.com/v2/address-books/' . $listID .'/contacts';

这让我觉得有点像这样:

https://username:password@api.dotmailer.com/v2/address-books/listID/contacts

以下是该页面的XML

<ApiContact>
<Id>1058905201</Id>
<Email>email@email.com</Email>
<OptInType>Unknown</OptInType>
<EmailType>Html</EmailType>
<DataFields i:nil="true"/>
<Status>Subscribed</Status>
</ApiContact>
</ArrayOfApiContact>

现在我需要将一个变量POST到API。我的变量是$useremail

我计划使用cURL来实现这一点,我使用PHP并避免使用REST而不是使用SOAP。

我对此完全陌生,但我接受了一些不起作用的代码,但是我试过了!

// Authenticate
$auth_url = 'https://' . $apiemail .':' . $apipassword . '@api.dotmailer.com/v2/address-books/' . $listID .'/contacts';

// open connection
$ch = curl_init();

// set the URL
curl_setopt($ch,CURLOPT_URL, $auth_url);
curl_setopt($ch,CURLOPT_POST, $useremail);

// execute post
$result = curl_exec($ch);

// close connection
curl_close($ch);

我知道这是关闭但是:

  • 这会将我发送到API API页面
  • 我知道某处我错过了将此行为添加到<email> XML上的操作
  • 该文档引用了我尚未提及的方法PostAddressBookContacts(),那么这是怎么回事?

对不起,如果这是模糊的。我很感激任何人的建议。

1 个答案:

答案 0 :(得分:1)

首先,如果您在浏览器中启动此网址:

https://username:password@api.dotmailer.com/v2/address-books/listID/contacts

它对你有用吗?

如果是,请回显$ auth_url。

$auth_url = 'https://' . $apiemail .':' . $apipassword . '@api.dotmailer.com/v2/address-books/' . $listID .'/contacts';
echo $auth_url;

并检查您的网址是否构造正确。然后:

修改

$data = array("Email" => "email@email.com");                                                                    
$data_string = json_encode($data); 
$req = curl_init($auth_url);
curl_setopt($req, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($req, CURLOPT_POST, 1);
curl_setopt($req, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($req, CURLOPT_HTTPHEADER, array(                                                                          
'Content-Type: application/json',                                                                                
'Content-Length: ' . strlen($data_string))                                                                       
); 
$res = curl_exec($req);
curl_close($req);