3

これが正常な場合は申し訳ありませんが、AFNetworking を使用して iOS から投稿リクエストを送信しようとしています。Charles を使用してリクエストを監視すると、GET が送信されていることがわかります。

GET /api/updateTeamAlert/ HTTP/1.1
Host: www.******r.co
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en;q=1, fr;q=0.9, de;q=0.8, ja;q=0.7, nl;q=0.6, it;q=0.5
Connection: keep-alive
User-Agent: ****** Alerts/1.0 (iPhone Simulator; iOS 6.1; Scale/2.00)

これは正常ですか?サーバーで POST パラメータが空である理由を調べようとしています - これが原因でしょうか?

私は次のようにリクエストを作成しています:

NSDictionary *params = @{@"device_id":@"test-device", @"innings":@6, @"team":@"WashingtonNationals"};

[_client postPath:@"updateTeamAlert"
       parameters:params
          success:^(AFHTTPRequestOperation *operation, id responseObject)
{
    NSString *responseStr = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
    NSLog(@"Request Successful, response '%@'", responseStr);
}
          failure:^(AFHTTPRequestOperation *operation, NSError *error)
{
    NSLog(@"[HTTPClient Error]: %@", error.localizedDescription);
}];

アップデート

まあ、これを機能させるために私がしなければならなかったのは、postPathを変更して末尾の「/」を含めることだけでした-おそらくこれはほとんどの人にとって明らかですが、受け入れられた答えの説明が欲しいです.

4

5 に答える 5

2

まあ、これを機能させるために私がしなければならなかったのは、postPathを変更して末尾の「/」を含めることだけでした-おそらくこれはほとんどの人にとって明らかですが、受け入れられた答えの説明が欲しいです.

PHP アプリケーションには、リダイレクトを実行するときに情報 (HTTP メソッドなど) を失う誤った構成のサーバーが含まれていることがよくあります。/あなたの場合、解決済みを特定の Web サービスの正規パスに追加しましたが、そのエンドポイントにリダイレクトする際に、POSTが に変更されましたGET

この問題を潜在的に解決する別の方法は、 を使用AFURLConnectionOperation -setRedirectResponseBlockして、リダイレクト リクエストに正しい動詞が含まれていることを確認することです。

于 2013-06-22T17:07:41.653 に答える
2

上記の@matttの答えは正しくありません。

HTTP/1.0 302 は、"POST /FOO" 302 を /BAR に渡すと論理的に予想されるように機能し、"POST /BAR" を取得することを暗示していました。ただし、この方法で実装したクライアントはほとんどまたはまったくなく、一般的にメソッドを GET に変更しました。これは、リダイレクトされた新しいリソースがユーザーに知られていないため、ある程度理解できます。また、未知のリソースにむやみに POST するべきではありません。

HTTP/1.1 はこれをクリアします - 302 はユーザーにリダイレクトについて知らせる必要があります。307 は、メソッドを維持しながら、期待どおりにリダイレクトを機能させます。

AFNetworking は、他のすべてのいたずらなクライアントと同じように動作するようにセットアップされています。302 はメソッドを GET に変更し、クライアントにユーザーに警告する機会を与えます。私自身、 AFNetworkingでこの問題が発生しました。いくつかのブレークポイントを設定し、ステップスルーして、目の前でメソッドが変化するのを見ました。

307 が AFNetworking で定義されたとおりに機能するかどうかはまだテストしていませんが、いずれにせよ、302 は HTTP/1.1 で定義された動作とは異なる動作をしています。

tl;dr - HTTP/1.1 では、302 ではなく 307 を使用してメソッドをリダイレクトおよび維持します。

于 2013-10-10T20:25:30.253 に答える