【问题标题】:Getting HTTP headers with xcode使用 xcode 获取 HTTP 标头
【发布时间】:2011-08-04 18:07:57
【问题描述】:

我正在尝试获取用户代理,但是当我尝试阅读它时,它会出现(null)

NSLog(@"user agent = %@", [request valueForHTTPHeaderField: @"User-Agent"]);

request 是一个 NSURLRequest。因此,我尝试获取 http 标头,但我认为没有。当我使用

NSLog(@"http headers = %d", [[req allHTTPHeaderFields] fileSize]);

它打印出零。 req 是一个 NSMutableURLRequest。有谁知道为什么会这样。

这是我正在使用的方法:

 - (BOOL)webView:(UIWebView )webView2 shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 
    NSMutableURLRequest *req = (NSMutableURLRequest *)request; 
    NSString *versionString = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString)kCFBundleVersionKey];
NSLog(@"http headers = %@", [request allHTTPHeaderFields]);
NSLog(@"http headers = %d", [[req allHTTPHeaderFields] fileSize]);
[req setValue:[NSString stringWithFormat:@"myApp/%@ %@", versionString, [request valueForHTTPHeaderField:@"User-Agent"]] forHTTPHeaderField:@"User-Agent"];
    NSLog(@"user agent = %@", [request valueForHTTPHeaderField: @"User-Agent"]);}

【问题讨论】:

  • NSLog(@"http headers = %d", [[req allHTTPHeaderFields] count]); 打印什么?
  • 你没有得到任何标题。您需要发布更多代码供我们进一步诊断。
  • 这是我正在使用的方法。
  • `- (BOOL)webView:(UIWebView )webView2 shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSMutableURLRequest *req = (NSMutableURLRequest *)request; NSString *versionString = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString)kCFBundleVersionKey];
  • NSLog(@"http headers = %@", [request allHTTPHeaderFields]); NSLog(@"http headers = %d", [[req allHTTPHeaderFields] fileSize]); [req setValue:[NSString stringWithFormat:@"myApp%@ %@", versionString, [request valueForHTTPHeaderField:@"User-Agent"]] forHTTPHeaderField:@"User-Agent"]; NSLog(@"user agent = %@", [request valueForHTTPHeaderField: @"User-Agent"]); }

标签: xcode http header user-agent nsurlrequest


【解决方案1】:

这对我有用:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    NSString* secretAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
    NSLog(@"navigator.userAgent = %@", secretAgent);

    NSDictionary* headers = [request allHTTPHeaderFields];
    NSLog(@"headers: %@",headers);

    NSString* ua = [request valueForHTTPHeaderField:@"User-Agent"];
    NSLog(@"User-Agent = %@", ua);
}

我不知道您为什么要查看filesize,而您只能查看标题本身。

参照。 https://stackoverflow.com/a/19184414/1431728

【讨论】:

    【解决方案2】:

    您的请求对象中没有任何标头,因为您没有添加任何标头。如果要指定User-Agent 标头,则需要自己添加,如here 所述。

    【讨论】:

    • 我尝试了该链接,但遇到了同样的问题。在我更改之前,用户代理仍然是(null)。 ` NSLog(@"user agent = %@", [request valueForHTTPHeaderField: @"User-Agent"]);` 所以当我向其中添加内容然后再次运行 NSLog 时,我得到的内容类似于 myApp/1.0 (null)跨度>
    • 在上面的代码中,您将 User-Agent 设置为 User-Agent 的当前值 - 为 null。你必须提供你自己的价值。
    • 不应该已经有一个用户代理。像 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:5.0.1) Gecko/20100101 Firefox/5.0.1
    猜你喜欢
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多