PUT
API のドキュメントで定義されている URI にリクエストを送信しようとしています。このドキュメントでは、アカウントを再アクティブ化するには、URL に PUT 要求を送信するだけでよいと記載されています。
ただし、PUT
適切な認証を使用してこの URL に要求を送信すると、411 length required
応答が返されます。PUT
周りを読んだ後、リクエストの content-length を 0 に設定することでこれをバイパスできることがわかりました。これはバイパスに機能し411
、アカウントを正常に再アクティブ化しますが、500
内部サーバー エラー応答を受け取るようになりました。
ドキュメント (およびテクニカル サポート スタッフ) は、PUT リクエストは空であると述べていますが、コンテンツの長さは 0 です。スタッフも私の問題を再現できませんでしたが、API の C# をサポートしていないため、リクエストを送信しているだけですcURL
/PHPなどを使用していますが、これは私にとってオプションではありません。
C# 内でWebClient
、HTTPWebRequest
Raw ソケットを使用してこれを完全に機能させようとしましたが (コード内で検証するために応答コードが必要です)、役に立ちませんでした。
API は C# をサポートしていないので、盲目的に航海しています。空のエンティティ PUT を C# 内の URL にレプリケートする方法を知っている人cURL
、または他の潜在的な回避策を知っている人はいますか?
編集: 試行されたコードの例: 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