2013-12-09 54 views
0

我正在使用一个非常基本的cURL API。我之前没有真正与cURL合作过,所以我正在尽全力去感受事物。使用cURL API

为了这个例子,我们假设有两个值可以传递给API:电子邮件和位置。

此外,我必须使用基本的HTTP身份验证,其中密码为空,用户名是我的API密钥。

为了帮助你了解我去为,这是API文档中提供给我的例子:

$ curl -X POST https://therequestpath -u $API_KEY: \ 
--form email=myemailaddress \ 
--form location='mylocation' \ 
--form content-type=application/json 
{"id":"750ea3d7"} 

在这一点上我真的不太明白我在做什么,但是这是我的代码已经出来,到目前为止(它不抛出任何PHP错误,但它不是做我想要的东西,无论是):

$username = 'myapikey'; 
$password = ''; 
$host = 'https://therequestpath'; 
$data = array('email' => 'myemailaddress', 'location' => 'mylocation'); 

$process = curl_init($host); 
curl_setopt($process, CURLOPT_HTTPHEADER, array('Content-Type: application/xml')); 
curl_setopt($process, CURLOPT_HEADER, 1); 
curl_setopt($process, CURLOPT_USERPWD, $username . ":" . $password); 
curl_setopt($process, CURLOPT_TIMEOUT, 30); 
curl_setopt($process, CURLOPT_POST, 1); 
curl_setopt($process, CURLOPT_POSTFIELDS, $data); 
curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE); 
curl_exec($process); 
curl_close($process); 

我不知道如果我在HTTP身份验证失败,传递电子邮件/位置值,或两者兼而有之。任何帮助,将不胜感激。

+0

在PHP中,您不应该发送'application/json'内容类型而不是'application/xml'吗? –

+1

另请注意,您可以在命令行中使用'content-type',但在PHP中使用'Content-Type'。这很重要。我也不明白你的命令行例子的最后两行 - 你没有在第四行结尾处省略\吗? –

+0

@ peci1 - API接受json和xml。在我发布之前,我将代码从json改为xml,看看它是否有所作为。在我复制代码之前,我忘了删除它。不过谢谢你的收获。 内容类型的案件是我的问题之一!感谢您的好意。我不确定我很快就会在自己身上发现这件事。 第二个问题是$ data数组中的单引号。一旦我删除这些*和*改变了内容类型的情况下,一切工作。 – Duplosion

回答

2

的第一个命令行示例演示应用程序/ JSON作为内容类型,所以你应该在你的PHP脚本中使用相同的:

curl_setopt($process, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 

你也应该URL-encode每个岗位场,就像这样:

$data = array('email' => urlencode('myemailaddress'), 'location' => urlencode('mylocation')); 
+0

感谢您的提示。我将内容类型更改为json。 另外,我现在使用urlencode作为值。我仍然没有得到预期的结果,但感谢帮助我清理干净。 – Duplosion