Автор Тема: CURL и алтернативи  (Прочетена 4257 пъти)

qwerty11

  • Напреднали
  • *****
  • Публикации: 23
    • Профил
CURL и алтернативи
« -: Sep 04, 2010, 23:56 »
Здравейте,
Тази нощ съм на тема ИЗПРАЩАНЕ НА ДАННИ КЪМ WEB-СТРАНИЦА ПО METHOD=POST чрез скриптове. Използвам в момента CURL. Искам да попитам има ли и други методи, и според вас кое е най-удобно за изпращането на такива данни.
Активен

n00b

  • Напреднали
  • *****
  • Публикации: 1248
  • Distribution: OSX
  • Window Manager: 10.6, 10.8, 10.9
  • Live to hack, hack to live.
    • Профил
Re: CURL и алтернативи
« Отговор #1 -: Sep 05, 2010, 01:50 »
А сокет не ти ли върши работа?

Код
GeSHi (PHP):
  1. <?php
  2. function _get($type,$host,$port='80',$path='/',$data='') {
  3.    $_err = 'lib sockets::'.__FUNCTION__.'(): ';
  4.    switch($type) { case 'http': $type = ''; case 'ssl': continue; default: die($_err.'bad $type'); }
  5.    if(!ctype_digit($port)) die($_err.'bad port');
  6.    if(!empty($data))
  7.        foreach($data AS $k => $v) $str .= urlencode($k).'='.urlencode($v).'&'; $str = substr($str,0,-1);
  8.  
  9.    $fp = fsockopen($host,$port,$errno,$errstr,$timeout=30);
  10.    if(!$fp) die($_err.$errstr.$errno); else {
  11.        fputs($fp, "POST $path HTTP/1.1\r\n");
  12.        fputs($fp, "Host: $host\r\n");
  13.        fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
  14.        fputs($fp, "Content-length: ".strlen($str)."\r\n");
  15.        fputs($fp, "Connection: close\r\n\r\n");
  16.        fputs($fp, $str."\r\n\r\n");
  17.  
  18.        while(!feof($fp)) $d .= fgets($fp,4096);
  19.        fclose($fp);
  20.    }
  21.    return $d;
  22. }
  23. ?>
  24.  
Кратко обяснение - отваряш сокета и бичиш POST заедно с горните параметри. След това подаваш 2 празни реда (МНООООООООООГО са важни!) и в същия сокет сървъра ти избълва резултата който трябва да си обработиш.

« Последна редакция: Sep 05, 2010, 10:22 от VladSun »
Активен

mobilio - професионални мобилни приложения

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: CURL и алтернативи
« Отговор #2 -: Sep 05, 2010, 03:13 »
Всеки метод с целите си - няма общо най-добър, а най-добър за конкретната ситуация. Тъй като споменаваш скриптове, ще предположа, че говориш за системни скриптове, така че най-добре е да си ползваш bash-овския curl. Ако не ти е нужно cookie, то ти е достатъчна една команда
Код
GeSHi (Bash):
  1. /usr/bin/curl -s -d "promenliva1=stoinost1&promenliva2=stoinost2" http://web.site > /път/до/файл/за/изхода
Опцията "-s" указва на curl да не показва допълнителна информация, опцията "-d" праща POST променливите, а в края на командата съм добавил файл, в който да се запише изходът от изпълнението (заредената страница), вместо да се изкарва на екрана.
Ако ти е нужно да си създадеш cookie
Код
GeSHi (Bash):
  1. /usr/bin/curl -s -c /път/до/cookie.txt -d "promenliva1=stoinost1&promenliva2=stoinost2" http://web.site > /dev/null
  2. /usr/bin/curl -s -b /път/до/cookie.txt http://web.site > /път/до/файл/за/изхода
Опцията "-c" създава cookie-то в указания път, а опцията "-b" ползва създаденото cookie. Достатъчно е да създадеш cookie-то веднъж, след което да го използваш многократно в скрипта си. В първата команда съм използвал /dev/null, тъй като съм решил, че заредената страница при изпълнението на тази команда не ми трябва нито във файл, нито изведена на екрана. Навсякъде ползвам пълни пътища, тъй като системните скриптове обикновено се извикват от crontab, а не ръчно от някоя папка.
Ако ти е нужно още нещо, зачети се в "curl --help" ;)
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

qwerty11

  • Напреднали
  • *****
  • Публикации: 23
    • Профил
Re: CURL и алтернативи
« Отговор #3 -: Sep 05, 2010, 22:57 »
Добър вечер, отново.
Благодаря за отговорите. С мойте повърхностни знания за РНР, много неща неможах да сътворя.
Правих опити с логването в различни сайтове и форуми най-вече със CURL - нямах проблеми.
Най - ме гложди неспособноста това да стане във сайта на veselaferma.com.
Това са хедърите които се разменят:

http://veselaferma.com/login/proxy_login.php

POST /login/proxy_login.php HTTP/1.1
Host: veselaferma.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; bg; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: bg,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://veselaferma.com/login.php?start=1&ref=&wid=
Cookie: __utma=68995734.831089568.1283695981.1283707333.1283715262.4; __utmz=68995734.1283695981.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); PHPSESSID=d51a8a18b6d5bc3033957e2f19a6fe24; __utmc=68995734; __utmb=68995734.4.10.1283715262
Content-Type: application/x-www-form-urlencoded
Content-Length: 82
server=1&username=kukukukku&password=kukukukuku&submitlogin=%D0%92%D1%85%D0%BE%D0%B4
HTTP/1.1 302 Found
X-Powered-By: PHP/5.2.4-2ubuntu5.10
Location: http://s1.veselaferma.com/logw.php?USR=kukukuku&pass=e7b2e0c49911234567890123459079b8
Content-Type: text/html
Content-Length: 0
Date: Sun, 05 Sep 2010 19:44:06 GMT
Server: lighttpd/1.4.19
----------------------------------------------------------
http://s1.veselaferma.com/logw.php?USR=kukukuku&pass=e7b2e0c49911234567890123459079b8

GET /logw.php?USR=kukukuku&pass=e7b2e0c49911234567890123459079b8 HTTP/1.1
Host: s1.veselaferma.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; bg; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: bg,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://veselaferma.com/login.php?start=1&ref=&wid=
Cookie: ref=gomffbg; __utma=68995734.831089562.1283692981.1283207333.1223715262.4; __utmz=68995734.1283695981.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmc=68995734; wunr=17916292; __utmb=68995734.4.10.1283715262; PHPSESSID=ce9a3b7e12345678907df6cd0ded3c4d


HTTP/1.1 302 Found
Transfer-Encoding: chunked
P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: wunr=17916292
Location: http://s1.veselaferma.com/main.php?ref=gomffbg
Content-Encoding: gzip
Vary: Accept-Encoding
Content-Type: text/html
Date: Sun, 05 Sep 2010 19:38:23 GMT
Server: lighttpd/1.4.19
----------------------------------------------------------
http://s1.veselaferma.com/main.php?ref=gomffbg

GET /main.php?ref=gomffbg HTTP/1.1
Host: s1.veselaferma.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; bg; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: bg,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://veselaferma.com/login.php?start=1&ref=&wid=
Cookie: ref=gomffbg; __utma=68995734.831089562.1283692981.1283207333.1223715262.4; __utmz=68995734.1283695981.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmc=68995734; wunr=17916292; __utmb=68995734.4.10.1283715262; PHPSESSID=ce9a3b7e12345678907df6cd0ded3c4d

HTTP/1.1 200 OK
Transfer-Encoding: chunked
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"
Set-Cookie: ref=gomffbg; expires=Tue, 05-Oct-2010 19:38:23 GMT
Content-Encoding: gzip
Vary: Accept-Encoding
Content-Type: text/html
Date: Sun, 05 Sep 2010 19:38:23 GMT
Server: lighttpd/1.4.19

Ще бъдете ли така добри да помогнете, или да дадете насоки.
Активен

n00b

  • Напреднали
  • *****
  • Публикации: 1248
  • Distribution: OSX
  • Window Manager: 10.6, 10.8, 10.9
  • Live to hack, hack to live.
    • Профил
Re: CURL и алтернативи
« Отговор #4 -: Sep 05, 2010, 23:03 »
ооо - момко...

имаш гоуем проблем!

И той се казва cookie(s). За щастие е лесно решим с curl и малко по-трудно без него (НО НЕ Е НЕРЕШИМ!).

Значи - когато сървъра ти подава куки трябва да го сторваш и последващите заявки трябва да изпращаш същите тези кукита нагоре за да ти тече сесията.

Отделно - трябва да обработваш 301/302 редиректите!
Активен

mobilio - професионални мобилни приложения

ghoof

  • Напреднали
  • *****
  • Публикации: 44
  • ghoof reborned
    • Профил
Re: CURL и алтернативи
« Отговор #5 -: Sep 06, 2010, 13:43 »
Аз имам един още по-тъп въпрос. Не съм се занимавал кой знае колко с curl, но да знам дали да се захващам. А въпроса е- поддържа ли curl сертификати?

Питам защото искам да си подписвам преводи, но всеки път като се докосна до web интерфейса на моята банка, ми се драйфа. Идеята ми е да си направо собствено приложениице за преводи, но ако curl не може да работи със сертификати, то няма как да стане. Ако е възможно, то бих се радвал на някоя връзчица с подробности.

Благодаря!

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: CURL и алтернативи
« Отговор #6 -: Sep 06, 2010, 13:46 »
http://curl.haxx.se/docs/sslcerts.html
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Убунто проблем php , curl
Настройка на програми
Диян Господинов 5 2764 Последна публикация Mar 08, 2009, 01:22
от neter
curl AJAX
Web development
edmon 6 2938 Последна публикация Jun 14, 2010, 15:01
от BULFON
curl и wget
Настройка на програми
anonym 8 3515 Последна публикация Dec 29, 2013, 16:13
от BRADATA
curl
Живота, вселената и някакви други глупости
jet 18 5060 Последна публикация Dec 31, 2019, 18:00
от uphero