将 CURL 请求转换为 C# 以访问 Snipcart API 返回 401 Unauthorized
Posted
技术标签:
【中文标题】将 CURL 请求转换为 C# 以访问 Snipcart API 返回 401 Unauthorized【英文标题】:Converting CURL request to C# for accessing Snipcart API returns 401 Unauthorized 【发布时间】:2017-08-17 19:14:16 【问题描述】:我正在尝试访问 Snipcart API(参考 - https://docs.snipcart.com/api-reference/authentication)。我已经创建了一个 API 密钥并按照文档中提到的步骤进行操作。
我正在尝试将 CURL 请求转换为 C#。我选择使用 HttpWebRequest。我从服务器返回 401 Unauthorized。我无法弄清楚我的请求有什么问题。
实际卷曲请求:- curl -H "Accept: application/json" https://app.snipcart.com/api/orders -u API_KEY:
以下是我尝试将上述 curl 请求转换为的代码
string baseURL = "https://app.snipcart.com/api/orders";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(baseURL);
req.AllowAutoRedirect = true;
req.ContentType = "application/json";
req.Accept = "application/json";
req.Method = "GET";
req.Headers.Add("API_Key", "MY_API_KEY_VALUE_COMES_HERE");
string jsonResponse = null;
using (WebResponse resp = req.GetResponse())
if (req.HaveResponse && resp != null)
using (var reader = new StreamReader(resp.GetResponseStream()))
jsonResponse = reader.ReadToEnd();
Console.Write(jsonResponse);
【问题讨论】:
【参考方案1】:您需要将标头作为基本身份验证标头发送,而不是“API_Key”试试这样。
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(baseURL);
req.AllowAutoRedirect = true;
req.ContentType = "application/json";
req.Accept = "application/json";
req.Method = "GET";
var basicAuthHeader = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes("MY_API_KEY_VALUE_COMES_HERE"));
req.Headers.Add("Authorization", "Basic " + basicAuthHeader);
【讨论】:
【参考方案2】:来自 Snipcart 的 API 参考表明您需要 Basic HTTP Authentication。
当我查看您的代码时,我认为您应该更改此行
req.Headers.Add("API_Key", "MY_API_KEY_VALUE_COMES_HERE");
到
req.Credentials = new NetworkCredential("API_Key", "MY_API_KEY_VALUE_COMES_HERE");
这个topic描述了一种相同的问题,你可以参考一下。
如果不能解决问题,您可以仔细查看curl API parameters manual,然后将其转换为 C# 代码。
curl -H "Accept: application/json" \
https://app.snipcart.com/api/orders \
-u API_KEY:
【讨论】:
以上是关于将 CURL 请求转换为 C# 以访问 Snipcart API 返回 401 Unauthorized的主要内容,如果未能解决你的问题,请参考以下文章
将带有嵌入式凭据 URL 的 cURL 请求转换为获取请求 [重复]
将 paypal curl 获取访问令牌请求转换为 guzzle