美文网首页web
POST上传图片到某些网站并获取其外链

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

作者: 疯狂的向日葵 | 来源:发表于2016-03-18 22:40 被阅读306次

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

    1.png
    用火狐浏览器的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);    
                    }
                    
                }
                
            }];
            
        }];
        
    }
    

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

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

    相关文章

      网友评论

      本文标题:POST上传图片到某些网站并获取其外链

      本文链接:https://www.haomeiwen.com/subject/dokhlttx.html