Curl Servicem8 API卷曲柱

Curl Servicem8 API卷曲柱,curl,servicem8,Curl,Servicem8,我对curlpost命令有点问题 curl --user "user:pass" --request POST https://api.servicem8.com/api_1.0/note.json --data '{"note":"AdvNotice 48 Hours","related_object":"company","related_object_uuid":"b1cca357-5e00-464e-b66c-8546d6b4963b"}' 我得到了答复 <!DOCTYPE ht

我对curlpost命令有点问题

curl --user "user:pass" --request POST https://api.servicem8.com/api_1.0/note.json --data '{"note":"AdvNotice 48 Hours","related_object":"company","related_object_uuid":"b1cca357-5e00-464e-b66c-8546d6b4963b"}'
我得到了答复

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>400 Bad Request</title>
    </head>
    <body>
        <h1>Bad Request</h1>
        <p>Bad Request. No data received in POST</p>
        <hr />
        <address>ServiceM8/1</address>
    </body>
</html>
我已经对此做了一点修改,并尝试通过REST客户机发布这些数据,这很好,但不是在cURL中

有什么建议吗

谢谢

您需要将内容类型标题设置为application/json,如果您想要json结果而不是xml,请添加标题Accept:application/json:

一艘班轮:

curl -u "user:password" "https://api.servicem8.com/api_1.0/note.json" -H "Accept: application/json" -H "Content-Type: application/json" -d "{\"note\" : \"AdvNotice 48 Hours\", \"related_object\" : \"company\", \"related_object_uuid\" : \"b1cca357-5e00-464e-b66c-8546d6b4963b\" }"

我想不出有什么理由想在CMD中使用它

然而,有一个很好的理由想在Windows中使用它,而不需要cygwin

您可以在PowerShell中执行此操作

首先 cURL中的-u选项不可移植。您应该了解它是一个特定于cURL的特性,它将尝试多种常见的身份验证类型。在这种情况下,它是。因此,为了进行良好的实践,在脚本和程序中,应该使用-H Authorization:Basic

比如,

如果我的用户名是myname@domain.com,我的密码是mypassword,格式如下:

myname@domain.com:mypassword 将其转换为base64是bXluYW1lQGRvbWFpbi5jb206bXlwYXNzd29yZA== 将其转换为可接受的标题是:
Authorization: Basic bXluYW1lQGRvbWFpbi5jb206bXlwYXNzd29yZA==
将其转换为卷曲选项是: 或使用PowerShell内置:

[Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("myname@domain.com:mypassword"))) 
其次 您可以在windows中使用PowerShell ISE为此创建模板

例如,在ServiceM8中,这将列出您的所有客户端:

$user = 'username@domain.com'
$pass = 'myPassword'
$method = 'GET'
$base64Creds = "Basic " + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(($user+":"+$pass)))
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Content-Type", 'application/json')
$headers.Add("Authorization", $base64Creds)
$response = Invoke-RestMethod 'https://api.servicem8.com/api_1.0/company.json' -Method $method -Headers $headers
Write-Output $response
您可以通过将$method更改为post并添加内容正文来发布数据,如前所述:

将参数放入哈希表中,并按如下方式传递:

在PowerShell中,您可以访问输出对象的属性$response.name、$response.billing\u地址、$response.uuid等


如果您绝对必须使用CMD,那么我建议将上述内容包装到一个ps1文件中,并使用powershell-executionPolicy bypass-file C:\Users\Whatever\MyCmd.ps1从批处理脚本中执行它。谢谢,Mate,我在windows上尝试过它,它似乎不适用于CMD,但我在Terminal中尝试过它,它可以工作。有什么我需要改变才能让它与CMD一起工作吗?你可以使用curl-u user:passwordhttps://api.servicem8.com/api_1.0/note.json -H Accept:application/json-H内容类型:application/json-d{\note\:\AdvNotice 48小时\、\related\u object\:\company\,\related\u object\u uuid\:\b1cca357-5e00-464e-b66c-8546d6b493b\}
echo -n 'myname@domain.com:mypassword' | openssl base64 -base64
[Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("myname@domain.com:mypassword"))) 
$user = 'username@domain.com'
$pass = 'myPassword'
$method = 'GET'
$base64Creds = "Basic " + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(($user+":"+$pass)))
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Content-Type", 'application/json')
$headers.Add("Authorization", $base64Creds)
$response = Invoke-RestMethod 'https://api.servicem8.com/api_1.0/company.json' -Method $method -Headers $headers
Write-Output $response
$postParams = @{username='me';moredata='qwerty'} Invoke-WebRequest -Uri http://example.com/foobar -Method POST -Body $postParams