2015-02-05 71 views
4

我正在尝试使用Curl从Microsoft Dynamics Nav中抽取一些数据。使用Curl为Dynamics Nav验证OData

我可以很容易地通过我的浏览器访问它在这个URL:http://kevans:(password)@192.168.0.30:8048/Sandbox/OData/,它工作得很好。

在Curl中,我试过这个:curl --ntlm -u kevans "http://192.168.0.30:8048/Sandbox/OData/" -v,在提示符下键入我的密码,但它返回401未授权错误。

有什么需要做的,以使其可用于卷曲?

这里是卷曲的输出:

curl --ntlm -u kevans "http://192.168.0.30:8048/Sandbox/OData/" -v 
Enter host password for user 'kevans': 
* About to connect() to 192.168.0.30 port 8048 (#0) 
* Trying 192.168.0.30... 
* Adding handle: conn: 0x525fe0 
* Adding handle: send: 0 
* Adding handle: recv: 0 
* Curl_addHandleToPipeline: length: 1 
* - Conn 0 (0x525fe0) send_pipe: 1, recv_pipe: 0 
* Connected to 192.168.0.30 (192.168.0.30) port 8048 (#0) 
* Server auth using NTLM with user 'kevans' 
> GET /Sandbox/OData/ HTTP/1.1 
> Authorization: NTLM TlRMTVNTUAABAAAAt4II4gAAAAAAAAAAAAAAAAAAAAAGA4AlAAAADw== 
> User-Agent: curl/7.33.0 
> Host: 192.168.0.30:8048 
> Accept: */* 
> 
< HTTP/1.1 401 Unauthorized 
< Content-Length: 0 
* Server Microsoft-HTTPAPI/2.0 is not blacklisted 
< Server: Microsoft-HTTPAPI/2.0 
< WWW-Authenticate: Negotiate 
< Date: Thu, 05 Feb 2015 20:25:26 GMT 
< 
* Connection #0 to host 192.168.0.30 left intact 

事情我已经尝试:使用--negotiate参数使用--ntlm

  • --anyauth
  • 使用我的域名连同

    • -u MYDOMAIN\kevans
    • 使用-u MYDOMAIN\kevans:password-u kevans:password
  • 回答

    2

    我更新了Curl从7.33到7.40,现在工作正常。我使用完全相同的命令,它的工作原理没有问题。该域是完全可选的,似乎没有影响它。

    2

    我有同样的问题,但结束了不同的解决方案。我只是把它放在这里,以防万一任何人仍然有这个问题。

    1. 打开Microsoft Dynamics NAV的服务器MMC工具
    2. 选择有问题的资产净值实例
    3. 点击右下角的编辑按钮来编辑实例
    4. 检查/启用“使用NTLM复选框验证”你让
    5. 重新启动NAV
    实例
  • 保存更改

    完成这些修改后,卷曲HTTP响应头“WWW验证:协商”,现在应该是“WWW验证:NTLM”和你的卷曲请求应该符合以下几点:

    curl -v --ntlm -u 'username:password' "http://YOUR_NAV_URL:8048/NAV_INSTANCE_NAME/OData/"