我在此链接后使用CURL测试Office 365 REST API:
Contacts REST API in Office 365 APIs Preview
我可以在Windows中使用curl命令正确获取一个联系人:
curl --no-sessionid --insecure --basic --user "user@domain.com:password" -H "Accept: application/json" "https://outlook.office365.com/EWS/OData/Me/Contacts?$orderby=DisplayName+asc&$top=1"
如果我尝试使用CURL创建一个联系人并使用最少的测试选项,请关注此链接的文档:
curl -X POST -d "{\"@odata.type\": \"#Microsoft.Exchange.Services.OData.Model.Contact\",\"GivenName\": \"TestContact\",\"EmailAddress1\": \"test@test.com\",\"BusinessPhone1\": \"123-456-7890\"}" https://outlook.office365.com/ews/odata/Me/Contacts --header "Content-Type:application/json" --insecure --verbose --user "user@domain.com:password"
我收到以下错误:
* About to connect() to outlook.office365.com port 443 (#0)
* Trying 157.56.250.178...
* connected
* Connected to outlook.office365.com (157.56.250.178) port 443 (#0)
* SSLv3, TLS handshake, Client hello (1):
...
* SSL connection using ECDHE-RSA-AES256-SHA
* Server certificate:
...
* Server auth using Basic with user 'user@domain.com'
> POST /ews/odata/Me/Contacts HTTP/1.1
...
> Content-Length: 157
>
* upload completely sent off: 157 out of 157 bytes
< HTTP/1.1 400 Bad Request
...
< Content-Length: 82
<
{"error":{"code":"ErrorInvalidRequest","message":"Cannot read the request body."}}* Connection #0 to host outlook.office365.com left intact
* Closing connection #0
* SSLv3, TLS alert, Client hello (1):
我已经搜索了互联网和stackoverflow,但类似的问题没有我正在寻找的答案。
我如何使用CURL创建联系人?我在Linux上测试过它,但结果相同。
答案 0 :(得分:3)
当我从Fiddler尝试时,以下请求有效。你能用CURL试试吗?
POST https://outlook.office365.com/ews/odata/Me/Contacts HTTP/1.1
Authorization: Basic <XXXX>
Content-Type: application/json
{
"GivenName" : "John",
"EmailAddresses" : [
{ "Address": "John@contoso.com", "Name" : "John" }
],
"BusinessPhones" : [
"123-456-7890"
]
}
我对您的请求做了一些更改。您不需要指定OData.type,因为我们推断您要添加联系人,因为您要向Contacts集合发送POST。我们需要修复我们的文档,因为它根据需要列出了实体类型。我们已将命名空间更新为Microsoft.OutlookServices,因此类型定义已更改。为了使API更易于使用,我们已将EmailAddress1,EmailAddress2等替换为EmailAddresses集合。同样,我们也将BusinessPhones,HomePhones等更改为集合。
正如我刚才在另一个post中解释的那样,您看到的问题来自某些changes being rolled out to our preview APIs,我们的文档正在更新中。当前的一系列更改包括版本控制支持,这不会成为未来的问题。
如果您有任何疑问或需要更多信息,请与我们联系。
谢谢,
Venkat
答案 1 :(得分:0)
使用以下CURL命令完美无缺:
curl -X POST -d "{\"GivenName\":\"John\",\"EmailAddresses\":[{\"Address\":\"John@contoso.com\",\"Name\":\"John\"}],\"BusinessPhones\":[\"123-456-7890\"]}" https://outlook.office365.com/ews/odata/Me/Contacts --header "Content-Type:application/json" --insecure --verbose --user "user@domain.com:password"
现在我们可以导出联系人(OWA不允许这样做)并使用像curl这样的简单实用程序导入它。
感谢您帮助Venkat。
答案 2 :(得分:0)
您的原始帖子显示以下命名空间: Microsoft.Exchange.Services.OData.Model.Contact
已改为: Microsoft.Office365.OutlookServices.Contact
由于名称空间错误,因此无法读取请求正文。