我正在尝试向PUT
API 文档定义的 URI 发送请求。本文档说明您只需向 URL 发送 PUT 请求即可重新激活帐户。
但是,当我通过适当的身份验证向此 URL 发送PUT
请求时,我会收到411 length required
响应。在阅读之后,我发现可以通过将我的PUT
请求的内容长度设置为 0 来绕过它,这可以绕过411
并且确实成功地重新激活了帐户,但是我现在收到了500
内部服务器错误响应。
文档(和技术支持人员)声明 PUT 请求为空,但内容长度为 0。工作人员也无法重现我的问题,但由于他们不再支持 API 的 C#,我假设他们只是发送cURL
请求/使用 PHP 或类似的东西,这对我来说不是一个选项。
在 C# 中,我尝试使用WebClient
,HTTPWebRequest
甚至原始套接字来尝试使其完全正常工作(我需要响应代码在我的代码中进行验证)但无济于事。
该 API 不支持 C#,所以我盲目航行,有没有人知道一种方法可以将空实体 PUT 复制cURL
到 C# 中的 url 或知道任何其他潜在的解决方法?
编辑:尝试的代码示例:尝试了 HttpWebRequest,返回 500 服务器错误。删除 Content-length 标头以产生 411
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Headers.Add("Authorization", "Basic " + encodeB64);
request.Method = "PUT";
request.ContentType = "text/XML";
request.ContentLength = 0;
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
WebClient 方法(快速输入,可能有点错误我现在已经废弃了这段代码,所以这只是它是什么的一个想法,它有效但也返回了服务器错误(500)
try
{
WebClient wc = new WebClient();
wc.Headers.Add("Authorization", "Basic " + encodeB64);
wc.UploadString(uri, "PUT", "");
String status = wc.ResponseHeaders.Get("Status");
}
使用 Fiddler 检查传出和传入请求,还尝试在 Fiddler 中编写请求,同样的问题是任何一种方法,需要内容长度或服务器错误,所以我开始认为与我联系的服务器本身就是问题,而不是我。
请注意,尽管有 500 错误代码,但这些请求确实重新激活了订阅
提琴手原始请求:
PUT https://xxxxxx.recurly.com/v2/subscriptions/xxxxxxxxxxxxxxxxxxxxxxx/reactivate HTTP/1.1
Authorization: Basic Y2U0OWZlZGNjMGU3NDEXuIOSmNNYxSakYTU4MzBhZDE0YmU=
Host: xxxxx.recurly.com
Content-Length: 0
原始响应:
HTTP/1.1 500 Internal Server Error
Server: blackhole
Date: Thu, 12 Sep 2013 10:38:18 GMT
Content-Type: text/html
Content-Length: 2482
Connection: close
X-Request-Id: 69192eb570323c495bb605b432e424fb