我正在尝试使用cURL发布到API,但是没有运气。我已经研究了2天,但似乎无法正常工作。
这是我可以粘贴到Web浏览器中的URL的示例,它可以正常工作,没问题:
http://{myserver}:{port}/api.aspx?Action=AddTicket&Key=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&Subject=Test&Description=Test&Username={domain}\{username}
(我显然编辑了一些信息)。
我知道cURL是最新的并且可以在服务器上运行,因为我可以向[ http://www.google.com ]发出一个简单的请求,它可以正确返回页面,而且我也在php.info页面上确认为启用。
我已经尝试过为cURL代码找到的每种布局,例如将 POSTFIELDS 设置为数组和字符串。我一直在跟着多个YouTube视频和网络教程一起学习“ T”,但都没有成功。我什至尝试将 $ ch 中的URL参数设置为上述整个URL,只是为了实现此目的……没有成功。
任何人都可以解释或举例说明如何设置其格式,以便它仅发布与上述URL相同的URL吗?
非常感谢!
根据要求,这是我的代码。
$url = 'http://{server}:{port}/api.aspx?Action=AddTicket';
$post_data = '&key=' . $key . '&subject=' . $subject . '&description=' . $details . '&username={domain}\{username}';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
if ($output === false) {
echo "cURL Error: " . curl_error($ch);
}
curl_close($ch);
print_r($output);
这是我为POSTFIELDS使用数组而不是字符串的尝试。
$url = 'http://{server}:{port}/api.aspx?Action=AddTicket';
$post_data = array(
'key' => $key,
'subject' => $subject,
'description' => $details,
'username' => '{domain}\{username}'
);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data));
$output = curl_exec($ch);
if ($output === false) {
echo "cURL Error: " . curl_error($ch);
}
curl_close($ch);
print_r($output);
我已经尝试了注释中给出的一些示例。这是我目前正在运行的小测试。
$data = array(
'Action' => 'AddTicket',
'Key' => 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
'Subject' => 'test',
'Description' => 'test',
'Username' => '{domain}\{username}'
);
$query = http_build_query($data);
$url = 'http://{server}:{port}/api.aspx?' . $query;
print_r($url);
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_HTTPAUTH => CURLAUTH_ANY,
CURLOPT_URL => $url
));
$resp = curl_exec($curl);
curl_close($curl);
现在,如果我直接从上面的代码中获取$ url变量,然后运行它...
header("Location:" . $url);
die();
它工作得很好...所以我的问题必须出在cURL语法或参数中...
添加以下代码后...
var_dump($resp);
var_dump(curl_getinfo($curl, CURLINFO_HTTP_CODE));
var_dump(curl_error($curl));
我得到以下结果...
string(0) ""
int(401)
string(0) ""
有人知道这意味着什么吗?
答案 0 :(得分:0)
编辑:看到您的最新更新,请尝试在邮递区使用json_encode。
您提供的URL使用GET参数。希望下面的代码片段能有所帮助;
$curl = curl_init();
// Heres our POSTFIELDS
$params = array(
'param1' => 'blah1',
'param2' => 'blah2'
);
$params_json = json_encode($params);
curl_setopt_array($curl, array(
CURLOPT_URL => 'http://example.com',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => 1,
CURLOPT_HTTPAUTH => CURLAUTH_ANY,
CURLOPT_POSTFIELDS => $params_json
));
$response = curl_exec($curl);
$error = curl_error($curl);
curl_close($curl);
答案 1 :(得分:0)
您的工作示例表明,这根本不是POST请求,而是GET请求。
尝试像这样构建您的URL:
$data = array(
'Action' => 'AddTicket',
'key' => $key,
'subject' => $subject,
'description' => $details,
'username' => '{domain}\{username}'
);
$query = http_build_query($data);
$url = 'http://{myserver}:{port}/api.aspx?' . $query;
然后,您可能只需要对该URL执行GET请求。