C#HTTP请求401和500错误
我一直在研究Walmart API,但在运行代码时,我不断得到401错误或500错误C#HTTP请求401和500错误,c#,api,header,webrequest,walmart-api,C#,Api,Header,Webrequest,Walmart Api,我一直在研究Walmart API,但在运行代码时,我不断得到401错误或500错误 public void post() { byte[] data = Encoding.ASCII.GetBytes( $"username={user}&password={password}"); HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://marketplace.
public void post()
{
byte[] data = Encoding.ASCII.GetBytes(
$"username={user}&password={password}");
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://marketplace.walmartapis.com/v2/feeds?feedType=item");
request.Method = "POST";
request.Accept = "application/xml;";
request.ContentLength = data.Length;
request.Headers.Add("WM_SVC.NAME", "Walmart Marketplace");
request.Headers.Add(authId);
request.Headers.Add("WM_CONSUMER.ID", user);
request.Headers.Add( time);
request.Headers.Add(CorId);
using (Stream stream = request.GetRequestStream ())
{
stream.Write(data , 0, data.Length);
}
string responseContent = null;
using (WebResponse response = request.GetResponse())
{
using (Stream stream = response.GetResponseStream())
{
using (StreamReader sr99 = new StreamReader(stream))
{
responseContent = sr99.ReadToEnd();
}
}
}
MessageBox.Show(responseContent);
}
其中authID是从沃尔玛提供的jar文件生成的签名
时间也从jar文件生成
CorID是一个随机生成的数字
user是用户id
下面是描述标题参数的链接。我的头球漏了什么吗
您的请求存在多个问题。首先,您要提交一个提要,但当它应该是一个多部分/表单数据请求时,将其作为application/xml发送。除此之外,您的标题设置不正确,目前使用C#向沃尔玛提交多部分/表单数据请求存在一个主要问题。我还没有看到任何人通过C#向沃尔玛成功发送提要的帖子。我目前正在使用C#执行一个批处理文件,然后启动一个修改版本的Walmart Java SDK,该SDK能够发送多部分/表单数据请求 下面的回复适用于除提要以外的任何请求。我将从下面列出的示例开始,以熟悉如何设置标题。这将适用于大多数沃尔玛接口,但如果请求是feed样式的请求,则您需要为多部分/表单数据问题找到更好的解决方案,使用Java SDK,或者等待C#SDK。如果有人读了这篇文章,并且对如何通过C#独家提交feed有了更好的答案,我很乐意听到 下面是一个有效的应用程序/xml请求示例
string timestamp = CurrentTimeMillis().ToString().Trim();
string query = @"orders/"+poID+"/acknowledge";
string request = v3BaseUrl + query; //Constructed URI
string stringToSign = consumerId + "\n" +
request.Trim() + "\n" +
"POST" + "\n" +
timestamp + "\n";
string signedString = signData(stringToSign); //Your signed string
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(request);
webRequest.Accept = "application/xml";
webRequest.ContentType = "application/xml";
webRequest.Method = "POST";
webRequest.Headers.Add("WM_SVC.NAME", "Walmart Marketplace");
webRequest.Headers.Add("WM_SEC.AUTH_SIGNATURE", signedString);
webRequest.Headers.Add("WM_CONSUMER.ID", consumerId);
webRequest.Headers.Add("WM_SEC.TIMESTAMP", timestamp.ToString().Trim());
webRequest.Headers.Add("WM_QOS.CORRELATION_ID", Guid.NewGuid().ToString());
webRequest.Headers.Add("WM_CONSUMER.CHANNEL.TYPE", channelType);
webRequest.ContentLength = 0;
webRequest.Timeout = Timeout.Infinite;
webRequest.KeepAlive = true;
using (HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse())
{
if (response.StatusCode == HttpStatusCode.OK)
{
success = true;
}
}
您的请求存在多个问题。首先,您要提交一个提要,但当它应该是一个多部分/表单数据请求时,将其作为application/xml发送。除此之外,您的标题设置不正确,目前使用C#向沃尔玛提交多部分/表单数据请求存在一个主要问题。我还没有看到任何人通过C#向沃尔玛成功发送提要的帖子。我目前正在使用C#执行一个批处理文件,然后启动一个修改版本的Walmart Java SDK,该SDK能够发送多部分/表单数据请求 下面的回复适用于除提要以外的任何请求。我将从下面列出的示例开始,以熟悉如何设置标题。这将适用于大多数沃尔玛接口,但如果请求是feed样式的请求,则您需要为多部分/表单数据问题找到更好的解决方案,使用Java SDK,或者等待C#SDK。如果有人读了这篇文章,并且对如何通过C#独家提交feed有了更好的答案,我很乐意听到 下面是一个有效的应用程序/xml请求示例
string timestamp = CurrentTimeMillis().ToString().Trim();
string query = @"orders/"+poID+"/acknowledge";
string request = v3BaseUrl + query; //Constructed URI
string stringToSign = consumerId + "\n" +
request.Trim() + "\n" +
"POST" + "\n" +
timestamp + "\n";
string signedString = signData(stringToSign); //Your signed string
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(request);
webRequest.Accept = "application/xml";
webRequest.ContentType = "application/xml";
webRequest.Method = "POST";
webRequest.Headers.Add("WM_SVC.NAME", "Walmart Marketplace");
webRequest.Headers.Add("WM_SEC.AUTH_SIGNATURE", signedString);
webRequest.Headers.Add("WM_CONSUMER.ID", consumerId);
webRequest.Headers.Add("WM_SEC.TIMESTAMP", timestamp.ToString().Trim());
webRequest.Headers.Add("WM_QOS.CORRELATION_ID", Guid.NewGuid().ToString());
webRequest.Headers.Add("WM_CONSUMER.CHANNEL.TYPE", channelType);
webRequest.ContentLength = 0;
webRequest.Timeout = Timeout.Infinite;
webRequest.KeepAlive = true;
using (HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse())
{
if (response.StatusCode == HttpStatusCode.OK)
{
success = true;
}
}
字节[]数据只是FORMAT中用于在Url中传递参数的文本。它不是结构的XML编码。可能会有帮助,但代码是php:(。字节[]数据只是用于在Url中传递参数的格式中的文本。它不是结构的XML编码。可能会有帮助,但代码是php:(。