网上搜到一些网站可以上传图片,生成URL,并保存一段时间,所以想到一个办法。
以http://img.hoop8.com/ 这个为例。
为了方便研究,上传了一个名为1234.txt的文件:
用火狐浏览器的firebug插件拦截一下:
A254FA9B-67FD-4BE4-BDAA-DB381C47C2BD.png
会出现3个请求:
1.第一个POST是上传文件;
2.第二个GET是刷新页面;
3.第三个...不知道啥...没仔细看
这里我用到了第一个和第二个:
1.打开POST,在POST里可以看到请求的源代码:
9A23E248-784A-484D-98F8-4F289DD14492.png
有了这个我们就可以按格式拼接POST请求了,吐槽一下,拼接真恶心。
2.POST完了,第二个是GET刷新页面,会得到一个HTML文件,重点就是解析这个HTML了!
9BCE943F-41D1-441F-B7BC-3BEE35FE98E4.png
如上图,在 li ...里面有了URL了!,这就是我们所需要的!
这里要用到第三方框架:TFHpple来解析,
我比较习惯直接把三方框架文件夹拉进项目,这是个大坑,没有受虐倾向千万别尝试。要不然会显示缺少libxml2.h,网上各种解决方法均不靠谱,我都试过了!!!完全解决不了问题。切记切记。
这里必须祭出神器Pod神器,install一下什么问题都没有了~~~
最后解析一下就好了~
OK talk is cheap show me the code!
-(void)postPortrait
{
NSString *boundary = @"JimmyLaw";
NSURL *url = [NSURL URLWithString:@"http://img.hoop8.com/upload.php"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:1 timeoutInterval:15.0f];
request.HTTPMethod = @"POST";
NSMutableData *dataM =[NSMutableData data];
//拼接数据体
NSString *str = [NSString stringWithFormat:@"\r\n-----------------------------%@\r\n", boundary];
[dataM appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];
str = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"MAX_FILE_SIZE\"\r\n\r\n"];
[dataM appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];
str =@"205000\r\n";
[dataM appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];
str = [NSString stringWithFormat:@"-----------------------------%@\r\n", boundary];
[dataM appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];
str = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"fileField\"\r\n\r\n"];
[dataM appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];
NSString *fileName =@"1212.txt\r\n";
[dataM appendData:[fileName dataUsingEncoding:NSUTF8StringEncoding]];
str = [NSString stringWithFormat:@"-----------------------------%@\r\n", boundary];
[dataM appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];
str = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"uploadimg\"; filename=\"%@\" \r\n", fileName];
[dataM appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];
str = @"Content-Type: application/octet-stream\r\n\r\n";
[dataM appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];
str= @"/Users/Eric-Mac/Desktop/1212.txt";
[dataM appendData:[NSData dataWithContentsOfFile:str]];
str = [NSString stringWithFormat:@"\r\n-----------------------------%@--\r\n", boundary];
[dataM appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];
//设置数据体
request.HTTPBody =dataM;
//设置头..
NSString *headerStr = [NSString stringWithFormat:@"multipart/form-data; boundary=---------------------------%@", boundary];
[request setValue:headerStr forHTTPHeaderField:@"Content-Type"];
//POST上传
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
NSLog(@"result1 = %@", response);
NSURLRequest *request2 = [NSURLRequest requestWithURL:url cachePolicy:1 timeoutInterval:15.0f];
//GET 刷新
[NSURLConnection sendAsynchronousRequest:request2 queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
TFHpple *htmlParser =[[TFHpple alloc] initWithHTMLData:data];
NSArray *elements=[htmlParser searchWithXPathQuery:@"//li"];
for (TFHppleElement *element in elements) {
NSArray *arr1 = [element children];
for (NSDictionary *dic1 in arr1)
{
NSString *str = [dic1 objectForKey:@"href"];
// 这里就得到咯~~~
NSLog(@"%@",str);
}
}
}];
}];
}
大神就别吐槽我拼接的蠢了...
网友评论