使用httpie在Linux调用.NET Core REST API遇400错误求解决
解决Httpie调用.NET Core REST API返回400 Bad Request的问题
首先看一下你的问题核心:PowerShell里用Invoke-WebRequest发送GET请求能成功,但移植到Httpie时因为请求方式和参数传递的错误导致了400响应。下面是修正后的脚本和问题分析:
正确的Httpie Bash脚本
#!/bin/bash url="http://172.16.63.241:6083/bbopman/messaging/apireferences" http GET $url \ Namespace=="MyApplication.MessagingApi" \ Version=="current" \ DataDefinitionLanguage=="Csharp" \ MakePartial==false \ MakeVirtual==false \ --output ~/AccountingApiMessageDefinitions.cs
为什么原脚本会失败?
错误使用了
-d参数http -d是用来发送POST请求的表单数据,但你的PowerShell脚本是用GET请求,把参数作为URL查询字符串传递的。-d会强制发送POST请求,这和服务器期望的请求方式不匹配,直接导致400错误。参数格式错误
你把多个参数放在一个引号里的写法request="Namespace=='...' Version=='...'"是错误的,Httpie需要每个查询参数单独用key==value的形式声明,它会自动把这些参数拼接成URL的查询字符串。遗漏了必填参数
原PowerShell脚本里有MakePartial和MakeVirtual两个参数,但你的Bash脚本里漏掉了它们,服务器可能因为缺少必要参数返回400。
额外优化:处理二进制响应
因为服务器返回的是octet-stream二进制流,使用--output参数(或简写-o)比直接重定向更稳妥,Httpie会正确处理二进制内容,避免编码问题。如果你想让Httpie显示下载进度,还可以加上--download参数:
http --download GET $url \ Namespace=="MyApplication.MessagingApi" \ Version=="current" \ DataDefinitionLanguage=="Csharp" \ MakePartial==false \ MakeVirtual==false \ -o ~/AccountingApiMessageDefinitions.cs
内容的提问来源于stack exchange,提问作者ThommyB
相关产品推荐
相关产品推荐

