1

我正在尝试向PUTAPI 文档定义的 URI 发送请求。本文档说明您只需向 URL 发送 PUT 请求即可重新激活帐户。

但是,当我通过适当的身份验证向此 URL 发送PUT请求时,我会收到411 length required响应。在阅读之后,我发现可以通过将我的PUT请求的内容长度设置为 0 来绕过它,这可以绕过411并且确实成功地重新激活了帐户,但是我现在收到了500内部服务器错误响应。

文档(和技术支持人员)声明 PUT 请求为空,但内容长度为 0。工作人员也无法重现我的问题,但由于他们不再支持 API 的 C#,我假设他们只是发送cURL请求/使用 PHP 或类似的东西,这对我来说不是一个选项。

在 C# 中,我尝试使用WebClientHTTPWebRequest甚至原始套接字来尝试使其完全正常工作(我需要响应代码在我的代码中进行验证)但无济于事。

该 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
4

0 回答 0