对https站点的PUT请求保持返回状态:400 Bad request

时间:2015-02-25 12:49:12

标签: c# http http-headers xmlhttprequest put

我试图用c#中的httpWebRequest向plug.dj发出PUT请求,我遇到的问题是我一直收到错误400(错误的请求),但我提出的请求看起来是和原来一样,我错了什么?

这些是我在转到网络标签时从Chrome获得的请求标头:

PUT /_/booth/lock HTTP/1.1
Host: plug.dj
Connection: keep-alive
Content-Length: 39
Accept: application/json, text/javascript, */*; q=0.01
Origin: https://plug.dj
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36
Content-Type: application/json
Referer: https://plug.dj/ao3
Accept-Encoding: gzip, deflate, sdch
Accept-Language: nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: {Left out becouse it's used to authenticate}

请求有效负载和请求Url:

{"isLocked":true,"removeAllDJs":false}
https://plug.dj/_/booth/lock

这是我使用httpWebRequest在c#中创建的(验证是正确的,这不是错误):

var httpWebRequest = (HttpWebRequest)WebRequest.Create(requestUrl);
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "PUT";

httpWebRequest.Accept                           = "application/json, text/javascript, */*; q=0.01";
httpWebRequest.Headers["Accept-Encoding"]       = "gzip, deflate, sdch";
httpWebRequest.Headers["Accept-Language"]       = "nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4";
httpWebRequest.ContentLength                    = data.Length;
httpWebRequest.Headers["Cookie"]                = GetCookies();
httpWebRequest.Host                             = "plug.dj";
httpWebRequest.Headers["Origin"]                = "https://plug.dj";
httpWebRequest.Referer                          = "https://plug.dj/" + _room;
httpWebRequest.UserAgent                        = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36";
httpWebRequest.Headers["X-Requested-With"]      = "XMLHttpRequest";

using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
    streamWriter.Write(data);
}

var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
    return streamReader.ReadToEnd();
}

0 个答案:

没有答案
相关问题