POST上传图片到某些网站并获取其外链

网上搜到一些网站可以上传图片,生成URL,并保存一段时间,所以想到一个办法。
以http://img.hoop8.com/ 这个为例。
为了方便研究,上传了一个名为1234.txt的文件:

POST上传图片到某些网站并获取其外链_第1张图片
1.png

用火狐浏览器的firebug插件拦截一下:
A254FA9B-67FD-4BE4-BDAA-DB381C47C2BD.png

会出现3个请求:
1.第一个POST是上传文件;
2.第二个GET是刷新页面;
3.第三个...不知道啥...没仔细看
这里我用到了第一个和第二个:
1.打开POST,在POST里可以看到请求的源代码:
POST上传图片到某些网站并获取其外链_第2张图片
9A23E248-784A-484D-98F8-4F289DD14492.png

有了这个我们就可以按格式拼接POST请求了,吐槽一下,拼接真恶心。
2.POST完了,第二个是GET刷新页面,会得到一个HTML文件,重点就是解析这个HTML了!
POST上传图片到某些网站并获取其外链_第3张图片
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);    
                }
                
            }
            
        }];
        
    }];
    
}

大神就别吐槽我拼接的蠢了...

PS 网站页面会有更新,HTML解析方法要注意调整,修改,以便正确查找到需要的外链---.2016.03.29

你可能感兴趣的:(POST上传图片到某些网站并获取其外链)