Objective-CのNSURLRequest
からすべてのHTTPヘッダーを取得するにはどうすればよいですか?HTTPヘッダーを取得する方法
答えて
これは、iPhoneプログラミングの問題の簡単ですが、明白ではないクラスに該当します。クイック投稿に値する:
NSHTTPURLResponse
クラスには、HTTP接続のヘッダーが含まれています。 NSHTTPURLResponse
変数を使用している場合は、allHeaderFieldsメッセージを送信して、NSDictionary
というヘッダーを簡単に取得できます。同期要求については
- 彼らはブロックしているため、お勧めできません - それはNSHTTPURLResponse
を移入するのは簡単です:
NSURL *url = [NSURL URLWithString:@"http://www.mobileorchard.com"];
NSURLRequest *request = [NSURLRequest requestWithURL: url];
NSHTTPURLResponse *response;
[NSURLConnection sendSynchronousRequest: request returningResponse: &response error: nil];
if ([response respondsToSelector:@selector(allHeaderFields)]) {
NSDictionary *dictionary = [response allHeaderFields];
NSLog([dictionary description]);
}
あなたはもう少し作業を行う必要が非同期要求で。コールバックconnection:didReceiveResponse:
が呼び出されると、第2パラメータとしてNSURLResponse
が渡されます。あなたはそのようなNSHTTPURLResponse
にキャストすることができます:NSURLConnection
考える
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;
if ([response respondsToSelector:@selector(allHeaderFields)]) {
NSDictionary *dictionary = [httpResponse allHeaderFields];
NSLog([dictionary description]);
}
}
YourViewController.h
@interface YourViewController : UIViewController <UIWebViewDelegate>
@property (weak, nonatomic) IBOutlet UIWebView *yourWebView;
@end
YourViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
//Set the UIWebView delegate to your view controller
self.yourWebView.delegate = self;
//Request your URL
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://website.com/your-page.php"]];
[self.legalWebView loadRequest:request];
}
//Implement the following method
- (void)webViewDidFinishLoad:(UIWebView *)webView{
NSLog(@"%@",[webView.request allHTTPHeaderFields]);
}
がiOSの9から廃止されて、あなたはNSURL
またはNSURLRequest
からMIMEタイプの情報を取得するためにNSURLSession
を使用することができます。
URLを取得するようにセッションに依頼し、デリゲートコールバックに最初のNSURLResponse
(MIMEタイプ情報を含む)を受信すると、セッションをキャンセルしてURL全体をダウンロードしないようにします。ここで
はそれをしないいくつかの裸の骨スウィフトコードです:
/// Use an NSURLSession to request MIME type and HTTP header details from URL.
///
/// Results extracted in delegate callback function URLSession(session:task:didCompleteWithError:).
///
func requestMIMETypeAndHeaderTypeDetails() {
let url = NSURL.init(string: "https://google.com/")
let urlRequest = NSURLRequest.init(URL: url!)
let session = NSURLSession.init(configuration: NSURLSessionConfiguration.ephemeralSessionConfiguration(), delegate: self, delegateQueue: NSOperationQueue.mainQueue())
let dataTask = session.dataTaskWithRequest(urlRequest)
dataTask.resume()
}
//MARK: NSURLSessionDelegate methods
func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveResponse response: NSURLResponse, completionHandler: (NSURLSessionResponseDisposition) -> Void) {
// Cancel the rest of the download - we only want the initial response to give us MIME type and header info.
completionHandler(NSURLSessionResponseDisposition.Cancel)
}
func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?)
{
var mimeType: String? = nil
var headers: [NSObject : AnyObject]? = nil
// Ignore NSURLErrorCancelled errors - these are a result of us cancelling the session in
// the delegate method URLSession(session:dataTask:response:completionHandler:).
if (error == nil || error?.code == NSURLErrorCancelled) {
mimeType = task.response?.MIMEType
if let httpStatusCode = (task.response as? NSHTTPURLResponse)?.statusCode {
headers = (task.response as? NSHTTPURLResponse)?.allHeaderFields
if httpStatusCode >= 200 && httpStatusCode < 300 {
// All good
} else {
// You may want to invalidate the mimeType/headers here as an http error
// occurred so the mimeType may actually be for a 404 page or
// other resource, rather than the URL you originally requested!
// mimeType = nil
// headers = nil
}
}
}
NSLog("mimeType = \(mimeType)")
NSLog("headers = \(headers)")
session.invalidateAndCancel()
}
私はそれが少し楽MIMEタイプのためのインラインクエリを作成することができますgithubのでURLEnquiryプロジェクトで同様の機能をパッケージ化しましたし、 HTTPヘッダー。 URLEnquiry.swiftは、自分のプロジェクトにドロップする対象のファイルです。
Alamofireを効率的に使用するスイフトバージョン。これは私のために働いたものです:
Alamofire.request(YOUR_URL).responseJSON {(data) in
if let val = data.response?.allHeaderFields as? [String: Any] {
print("\(val)")
}
}
- 1. WKWebViewからhttpヘッダー値を取得する方法
- 2. OpenFire APIでhttpヘッダーを取得する方法
- 3. JavaのHTTPヘッダーからIPアドレスを取得する方法
- 4. nginxで非標準のHTTPヘッダーを取得する方法は?
- 5. GWTエントリーポイントでreferrer httpヘッダーを取得する方法
- 6. ヘッダー値を取得する方法
- 7. GlideとOkHttpを使用してhttp応答ヘッダーを取得する方法
- 8. AngularJSでのPOST応答からヘッダーを取得する方法$ http
- 9. NodeJS - SOAP Webサービスの応答のHTTPヘッダーを取得する方法
- 10. httpを取得する方法JQueryを取得する
- 11. HTTPステータスコードを取得する方法
- 12. HTTPヘッダーフォームデータを取得する方法
- 13. 本文を取得せずにHTTP GETリクエストでヘッダーのみを取得する方法
- 14. カスタムHTTPヘッダーの設定と取得
- 15. Application Insights Operation HTTPヘッダーから取得
- 16. PHPのHTTPヘッダーからJSONメッセージを読み取る方法
- 17. CGI BashスクリプトでHTTPヘッダー値を読み取る方法
- 18. 変数でhttpヘッダーの応答値を取る方法は?
- 19. HTTPリクエストでhttp cookie(ヘッダー)を設定する方法
- 20. Rails:サーバーの応答HTTPヘッダーを取得するには?
- 21. URLのHttpヘッダーの詳細を取得するJQuery/Javascript
- 22. クライアントからヘッダーHTTPデータを取得するGo言語
- 23. akkaルーティングdslでhttpヘッダーを取得する
- 24. React.jsでhttpヘッダーを取得するには
- 25. 現在のセレクションのdrive.urlでhttpヘッダーを取得するには?
- 26. フォームを使用してヘッダー情報を取得する方法
- 27. Content-Lengthヘッダー(ヘッド要求メソッド)を取得する方法
- 28. C#でヘッダーからAccesトークンを取得する方法
- 29. htmlファイルからヘッダーを取得する方法
- 30. ヘッダー付きAPIからjsonデータを取得する方法
http応答ヘッダーを取得してからHEAD要求を送信したい場合は、 HEAD要求は応答の本体をフェッチしません。 例 - リクエストでHttpメソッドの型を設定します。 NSMutableURLRequest * mutableRequest = [[NSMutableURLRequest alloc] initWithURL:url]; mutableRequest.HTTPMethod = @ "HEAD"; – Omkar
NSURLResponseをNSHTTPURLResponseにキャストすべき理由は? – youssman
これはリクエストで送信されたすべてのヘッダを記録しません!追加のヘッダーをNSURLSessionConfigurationに設定すると、それらは記録されません。私はまだ応答からそれらを取得する方法を発見していない... – Johanneke