Загрузка фото images.google.ru

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Romik001, 21 Mar 2015.

  1. Romik001

    Romik001 Member

    Joined:
    18 Jul 2009
    Messages:
    43
    Likes Received:
    8
    Reputations:
    10
    Приветствую, тру кодеры. Давно ничего не говнокодил, пришла тут идея одна, и мне понадобилось сделать проверку фото через гугл images.google.ru.
    Посниферил, вижу следующее:
    POSTDATA =-----------------------------3856678821789
    Content-Disposition: form-data; name="image_url"


    -----------------------------3856678821789
    Content-Disposition: form-data; name="encoded_image"; filename="tst.jpg"
    Content-Type: image/jpeg

    ÿØÿà

    и так, делаю сначала запрос на https://images.google.com/?gws_rd=ssl парсю 2 куки, NID и PREF, подставляю.

    Далее пытаюсь отправить пост, с картинкой:

    Code:
    TIdMultiPartFormDataStream *img_p = new TIdMultiPartFormDataStream;
    
    String type = "image/jpeg";
              img_p->AddFormField("image_url", "");
              img_p->AddFormField("encoded_image", "");
              try{
              img_p->AddFile("filename", "tst.jpg", type);
              } catch(...)  {Memo1->Lines->Add("Ошибка файл не добавлен"); }
    
              http->Request->Referer="https://images.google.com/?gws_rd=ssl";
              try{
    http->Post("https://images.google.com/searchbyimage/upload", img_p);
              } catch (...) {}
              Memo1->Lines->Add(http->Response->RawHeaders->Text);
    delete img_p;
    Но в Location приходит короткий урл, совсем не тот который нужен что бы определить уникальность картинки.
    Он слишком короткий. Без кукисов точно такой же приходит, при переходе по нему попадаю на страницу с таким содержанием: "Поддерживаются только следующие форматы изображений: JPEG, GIF, PNG, BMP, TIFF или WebP."

    п.с.: пробовал в двух версиях билдера 6.0 и XE2, с разными libeay32.dll и ssleay32.dll все тоже самое. Так же подставлял все заголовки запроса, юзерагент, реферер и все что браузер отправлял, но ничего не изменилось. В общем перепробовал всё что мог.
    Если кому не жалко, подскажите что можно сделать... Спасибо, с уважением.
     
    #1 Romik001, 21 Mar 2015
    Last edited: 21 Mar 2015
  2. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,581
    Likes Received:
    1,317
    Reputations:
    1,557
    "Поддерживаются только следующие форматы изображений: JPEG, GIF, PNG, BMP, TIFF или WebP." - неправильную картинку отправляешь.
    Куки, реферер и т.д. не нужны. В запросе на "/searchbyimage/upload" обязательным является только поле encoded_image (Content-Type и filename поля любые) и заголовки Host, Content-Type, Content-Length. После редиректа на "/search?tbs=sbi..." нужен еще User-Agent.
     
    #2 M_script, 22 Mar 2015
    Last edited: 22 Mar 2015
  3. Romik001

    Romik001 Member

    Joined:
    18 Jul 2009
    Messages:
    43
    Likes Received:
    8
    Reputations:
    10
    Спасибо что не проигнорировали и рассказали о ньюансах. В общем как оказалось, с пост-параметрами накосячил,
    Code:
    img_p->AddFormField("encoded_image", "");
    это поле я неправильно добавил, и это неправильно оформил
    Code:
    img_p->AddFile("filename", "tst.jpg", type);
    :) надо всего то было сделать:
    Code:
    img_p->AddFile("encoded_image", "tst.jpg", type);
    и правильный урл гугл сразу прислал

    Ещё интересно есть ли там каптча
     
    #3 Romik001, 24 Mar 2015
    Last edited: 24 Mar 2015