0

ファイルをアップロードするために、iOS で ASIHttpRequest を使用しています。場合によっては、(一部の条件が満たされていないため) ユーザーがファイルをアップロードできないため、サーバーはカスタム ヘッダーでエラー (400 ステータス コード) を返す必要があります。それが起こると、ASIHttpRequest は失敗しますが、ステータス コードと応答ヘッダーはありません...

ただし、これは大規模なデータ (1M 以上) の場合のみです。より小さなデータの場合、それは仕事です。ソースを掘り下げたところ、すべてのデータが送信される前にサーバーが 400 を返すと、CFNetwork は kCFStreamEventErrorOccurred を返し、ここから読み取りストリームのエラー以外のものを読み取ることができないことがわかりました。しかし、すべてのデータが送信された後にリクエストが失敗した場合、kCFStreamEventEndEncounteredが送信され、ここからステータス コードとレスポンス リーダーを読み取ることができます。

ASIHttpRequest が廃止されたので、自分で修正したいのですが、方法がわかりません。それはCFNetworkの制限なのではないかと心配しています...インターネットやドキュメントでそれについて何も見つけていません...

誰もそれを処理する方法を知っていますか? または、CFNetworkについて十分に知っているので、手がかりを得ることができますか?

ありがとう !

4

1 に答える 1

0

わかりました、私は答えを見つけました。

サーバー側で修正しました。本文 (1 文字のみでも) を含むエラーが返された場合、iOS 側で動作し、CFNetwork はステータス コードとヘッダーを読み取ることができます。

サーバーでSpringでTomcatを使用していますが、応答でステータスコードのみを設定するとバグになる可能性があります。たぶん、応答ストリームを正しく閉じていないのかもしれませんが、わかりません。

ところで、CFNetworkは非常に賢明なようです... NSUrlRequestでボディなしで動作するためです。

于 2013-03-07T09:57:38.267 に答える