Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Tomcat
- JavaScript
- udp
- 티스토리 초대장
- Objective C
- Eclipse
- permgen space
- Android
- Memory
- Database
- jsp
- ipad
- 한글
- java
- HTML
- jQuery
- MySQL
- 인코딩
- UIWebView
- C#
- 티스토리 초대
- spring
- encoding
- 메모리
- ios
- iphone
- WebView
- 톰켓
- XML
- 이클립스
Archives
- Today
- Total
suroMind
[iPhone]UIWebView에서 User-Agent 변경 본문
아래 코드는 iOS5 부터는 적용되지 않습니다.
http://blog.suromind.com/94
위 링크에 새로운 방법이 제시 되어 있으니 확인해 보세요
=-=-====================================================================================================================
여러모로 삽질을 많이 한 부분입니다.
첫번째로 performselector를 이용하여 setCustomUserAgent 함수를 호출하고 수정하거나
두번째로
-(BOOL) webView:(UIWebView*) webView shouldStartLoadWithRequest:(NSURLRequest*) req navigationType:(UIWebViewNavigationType) navigationType
위 함수에서 헤더를 셋팅해주는 방법도 있다..
첫번째 방법은 비공개API라서 안된다하고 두번째 방법으로 해봤는데.. 되긴 되는데 잘 안된다.
JAVA 서블릿을 타면 헤더가 바뀔때도 있고 안바뀔때도 있고 지 멋대로다.. ㅜ
결국 찾은 방법은 외국사이트에서 찾았다.
================================= MethodSwizzling.h =================================
#import <Foundation/Foundation.h>
@interface NSObject (Swizzle)
+(BOOL)swizzleMethod:(SEL)origSelector withMethod:(SEL)newSelector;
@end
================================= MethodSwizzling.m ================================
#import "MethodSwizzling.h"
#import <objc/runtime.h>
@implementation NSObject (Swizzle)
+(BOOL)swizzleMethod:(SEL)origSelector withMethod:(SEL)newSelector{
Method origMethod = class_getInstanceMethod(self, origSelector);
Method newMethod = class_getInstanceMethod(self, newSelector);
if (origMethod && newMethod) {
if (class_addMethod(self, origSelector, method_getImplementation(newMethod), method_getTypeEncoding(newMethod))) {
class_replaceMethod(self, newSelector, method_getImplementation(origMethod), method_getTypeEncoding(origMethod));
} else {
method_exchangeImplementations(origMethod, newMethod);
}
return YES;
}
return NO;
}
@end
================================ MyMutableURLRequest.h ===========================
#import <Foundation/Foundation.h>
@interface NSMutableURLRequest (MyMutableURLRequest)
+ (void) setupUserAgentOverwrite;
@end
================================= MyMutableURLRequest.m ==========================
#import "MyMutableURLRequest.h"
#import "MethodSwizzling.h"
@implementation NSMutableURLRequest (MyMutableURLRequest)
- (void)newSetValue:(NSString *)value forHTTPHeaderField:(NSString *)field;
{
if ([field isEqualToString:@"User-Agent"]) {
if (![value hasPrefix:@"webview_iphone"]) {
value = [value stringByAppendingString:@",webview_iphone"];
}
//value = @"The new User-Agent string";
}
[self newSetValue:value forHTTPHeaderField:field];
}
+ (void)setupUserAgentOverwrite
{
[self swizzleMethod:@selector(setValue:forHTTPHeaderField:)
withMethod:@selector(newSetValue:forHTTPHeaderField:)];
}
@end
==========================================================================================
UserAgent값은 MyMutableURLRequest.m에서 value값을 통해 수정할 수 있다.
본인은 기본적으로 출력되는 값 뒤에 ,webview_iphone 을 stringByAppendingString 통해 추가하는
형식으로 집어넣었다. 이부분을 입맛에 맛게 수정하면 될듯 하다.
사용은 아래처럼 import해주고 뷰가 시작될때 한줄만 써주면 된다.
....
#import "MyMutableURLRequest.h"
....
-(void)viewDidLoad{
http://blog.suromind.com/94
위 링크에 새로운 방법이 제시 되어 있으니 확인해 보세요
=-=-====================================================================================================================
여러모로 삽질을 많이 한 부분입니다.
첫번째로 performselector를 이용하여 setCustomUserAgent 함수를 호출하고 수정하거나
두번째로
-(BOOL) webView:(UIWebView*) webView shouldStartLoadWithRequest:(NSURLRequest*) req navigationType:(UIWebViewNavigationType) navigationType
위 함수에서 헤더를 셋팅해주는 방법도 있다..
첫번째 방법은 비공개API라서 안된다하고 두번째 방법으로 해봤는데.. 되긴 되는데 잘 안된다.
JAVA 서블릿을 타면 헤더가 바뀔때도 있고 안바뀔때도 있고 지 멋대로다.. ㅜ
결국 찾은 방법은 외국사이트에서 찾았다.
================================= MethodSwizzling.h =================================
#import <Foundation/Foundation.h>
@interface NSObject (Swizzle)
+(BOOL)swizzleMethod:(SEL)origSelector withMethod:(SEL)newSelector;
@end
================================= MethodSwizzling.m ================================
#import "MethodSwizzling.h"
#import <objc/runtime.h>
@implementation NSObject (Swizzle)
+(BOOL)swizzleMethod:(SEL)origSelector withMethod:(SEL)newSelector{
Method origMethod = class_getInstanceMethod(self, origSelector);
Method newMethod = class_getInstanceMethod(self, newSelector);
if (origMethod && newMethod) {
if (class_addMethod(self, origSelector, method_getImplementation(newMethod), method_getTypeEncoding(newMethod))) {
class_replaceMethod(self, newSelector, method_getImplementation(origMethod), method_getTypeEncoding(origMethod));
} else {
method_exchangeImplementations(origMethod, newMethod);
}
return YES;
}
return NO;
}
@end
================================ MyMutableURLRequest.h ===========================
#import <Foundation/Foundation.h>
@interface NSMutableURLRequest (MyMutableURLRequest)
+ (void) setupUserAgentOverwrite;
@end
================================= MyMutableURLRequest.m ==========================
#import "MyMutableURLRequest.h"
#import "MethodSwizzling.h"
@implementation NSMutableURLRequest (MyMutableURLRequest)
- (void)newSetValue:(NSString *)value forHTTPHeaderField:(NSString *)field;
{
if ([field isEqualToString:@"User-Agent"]) {
if (![value hasPrefix:@"webview_iphone"]) {
value = [value stringByAppendingString:@",webview_iphone"];
}
//value = @"The new User-Agent string";
}
[self newSetValue:value forHTTPHeaderField:field];
}
+ (void)setupUserAgentOverwrite
{
[self swizzleMethod:@selector(setValue:forHTTPHeaderField:)
withMethod:@selector(newSetValue:forHTTPHeaderField:)];
}
@end
==========================================================================================
UserAgent값은 MyMutableURLRequest.m에서 value값을 통해 수정할 수 있다.
본인은 기본적으로 출력되는 값 뒤에 ,webview_iphone 을 stringByAppendingString 통해 추가하는
형식으로 집어넣었다. 이부분을 입맛에 맛게 수정하면 될듯 하다.
사용은 아래처럼 import해주고 뷰가 시작될때 한줄만 써주면 된다.
....
#import "MyMutableURLRequest.h"
....
-(void)viewDidLoad{
[super viewDidLoad];
[NSMutableURLRequest setupUserAgentOverwrite];
}
'IT분야 > iOS' 카테고리의 다른 글
[iPhone] 네트워크 연결 상태 체크 (0) | 2011.03.24 |
---|---|
[iPhone]JSON 사용하기 (2) | 2011.03.24 |
[iPhone]Objective-C ~ Java AES 암호화 (6) | 2011.03.24 |
[iPhone] Xcode 개발툴 및 iPhone SDK 삭제 (0) | 2011.03.18 |
[iPhone] Lib Warning Finle not Found (0) | 2011.01.23 |
Comments