在我发布的API发布API的最终版本之后,我遇到了REST POST请求的问题。它没有发生任何事故,我被告知,对于新版本,服务器对于'application / json'类型更严格。以下cli curl命令可以游泳:
cat json.txt|curl -v -k -u user:password -F 'exchangeInstance=@-;type=application/json' https://my.url.here
但是,我需要在代码中执行此操作。使用php curl库我有一个简单的测试脚本,如下所示:
$post = array(
"exchangeInstance" => $json_string,
"type" => "application/json",
);
$url = 'myurlhere';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "user:pass");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($ch);
$info = curl_getinfo($ch);
var_dump($post);
var_dump($result);
echo $result;
var_dump($info);
当我阅读文档时,如果我将数组作为CURLOPT_POSTFIELDS传递,则标题中的Content-type应自动设置为'multipart / form',然后我将元素传递的类型设置为'application /数组中的json'。
然而,api没有我的POST请求。我从他们那里得到一个错误,清楚地表明他们正在收到GET请求。这怎么可能?我错过了什么?
答案 0 :(得分:1)
curl -F
!== -d
$post = array(
"exchangeInstance" => sprintf('@%s;type=application/json', $json_string),
);