Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2009-07-09 17:15:40

  ich - Użytkownik

ich
Użytkownik
Zarejestrowany: 2008-06-22

[PHP/CURL/FSOCKOPEN] Problem z przesyłaniem POST

Witam wszystkich,

potrzebuje pomocy kogoś oblatanego z programowaniem w PHP.
Mianowicie, pisze skrypt dodawania ogłoszeń do jednego z portali.
Stworzyłem dwa skrypty jeden z wykorzystaniem CURL i ten działa o ile nie chce wysłać zbyt dużej ilości danych/informacji metodą POST.
Działający skrypt z CURL:

Kod:

<?php

$ogloszenie = array();
$ogloszenie[kategoria] = 'kat1';
$ogloszenie[tytul] = 'tytul_opisu';
$ogloszenie[opis] = 'opis';
$ogloszenie[gal] = 'link_do_img';
$ogloszenie[gal_min] = 'link_do_img_mini';
$strona = curl_init();

curl_setopt($strona, CURLOPT_HEADER, false);
curl_setopt($strona, CURLOPT_FRESH_CONNECT, true);
curl_setopt($strona, CURLOPT_RETURNTRANSFER, true);
curl_setopt($strona, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($strona, CURLOPT_USERAGENT, 'Mozilla/5.0
 (Windows; U; Windows NT 5.1; pl; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10');
curl_setopt($strona, CURLOPT_COOKIESESSION, TRUE);
curl_setopt($strona, CURLOPT_COOKIEFILE, 'cookies.txt');
curl_setopt($strona, CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt($strona, CURLOPT_COOKIE, session_name() . '=' . session_id());
curl_setopt($strona, CURLOPT_TIMEOUT, 50);
curl_setopt($strona, CURLOPT_POST, true);
curl_setopt($strona, CURLOPT_POSTFIELDS, 'login=rysiopysio&haslo=jakieshaselko&Submit=zaloguj się');

curl_setopt($strona, CURLOPT_URL, 'http://strona_www.pl/logowanie.php');

curl_setopt($strona, CURLOPT_POST, true);
curl_setopt($strona, CURLOPT_POSTFIELDS, 'SubArea=3200008&Thumbnail='.$ogloszenie[gal_min].'&Photo='.$ogloszenie[gal].'&featuredAdDuration=0&CatId='.$ogloszenie[kategoria].'&Title='.$ogloszenie[tytul].'&Description='.$ogloszenie[opis].'&ReformattedDesc=1&PreviewToPost=false&submit=dodaj ogłoszenie >');
curl_setopt($strona, CURLOPT_URL, 'http://strona_www.pl/panel.php');
curl_close($strona);

?>

W związku z tym że CURL nie daje rady zacząłem kombinować z fsockopen a dokładniej z klasą http://scripts.incutio.com/httpclient/.

Skrypt który wypociłem wygląda następująco:

Kod:

<?php

require_once('HttpClient.class.php');
$plik_cookie = 'ciastko.txt';

$client = new HttpClient('strona_www.pl');
$client->setMaxRedirects(10);
$client->setDebug(true);

$client->setUserAgent('Mozilla/5.0 
(Windows; U; Windows NT 5.1; en-US; rv:1.3a) Gecko/20021207');
$client->post('/logowanie.php', array(
   'login' => 'rysio',
   'haslo' => 'cosik',
   'Submit' => 'zaloguj się'
));
// pobieranie danych cookie i zapisywanie ich do pliku
foreach($client -> getHeaders() as $typ1 => $wartosc1){
   if ($typ1 == 'set-cookie'){
           $i=0;
       foreach($wartosc1 as $typ2 => $wartosc2){
           if(!$i == 0){ $zapis_cookie .= "\r\n";}
           $zapis_cookie .= "$wartosc2";
           $i++;
       }
   }
}
//czytanie danych z pliku i przekształcanie do tablicy
file_put_contents($plik_cookie, $zapis_cookie);
$czytanie_z_cookie = file_get_contents($plik_cookie);
$dzielenie_linie = explode("\r\n", $czytanie_z_cookie);

$client->setCookies($dzielenie_linie);

$client->get('/panel.php');

echo $client->getContent();

?>

Dalej niestety nie osiągnąłem żądanego efektu, przy takim skrypcie dostaje odpowiedź od strony
[b]Twoja przeglądarka nie akceptuje plików cookie. Włącz pliki cookie, jeśli chcesz się zalogować.[/b]

Jakiś pomysł??

Offline

 

#2  2009-07-10 19:48:51

  jezoo - Dzięcioł

jezoo
Dzięcioł
Skąd: Z lasu
Zarejestrowany: 2005-09-02

Re: [PHP/CURL/FSOCKOPEN] Problem z przesyłaniem POST

1) sprawdz jaki masz limit wysylania metoda POST za pomoca funkcji phpinfo()
2) pokaz metode: $client->setCookies($dzielenie_linie);
3) sprawdz czy masz prawo do zapisu do pliku (0666) i zapisywanie w katalogu


[img]http://intershock.pl/images/icons/freebsd.jpg[/img] [img]http://www.the-eleven.com/site_media/static/img/postgresql_powered.png[/img] [img]http://www.wwgmc.com/images/badge_php.gif[/img]
LRU #480459

Offline

 

#3  2009-07-11 12:46:33

  ich - Użytkownik

ich
Użytkownik
Zarejestrowany: 2008-06-22

Re: [PHP/CURL/FSOCKOPEN] Problem z przesyłaniem POST

Witam,

dzięki za zainteresowanie.

A więc tak:
ad.1 ) post_max_size:    64M (chyba ze chodzi o coś innego)

ad.2 ) jeśli chodzi o Cookie jest to załatwiane przy pomocy tej classy http://scripts.incutio.com/httpclient/

ad.3 ) do całego folderu nie dawałem uprawnienie, tylko do pliku w którym przechowuje ciasteczka. Dla pewności dałem mu uprawnienia 0777. Dane cookie są zapisywane do pliku, jak i odczytywane.

Pozdrawiam.

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)

[ Generated in 0.007 seconds, 9 queries executed ]

Informacje debugowania

Time (s) Query
0.00009 SET CHARSET latin2
0.00004 SET NAMES latin2
0.00117 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.14.134.18' WHERE u.id=1
0.00115 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.14.134.18', 1732325681)
0.00045 SELECT * FROM punbb_online WHERE logged<1732325381
0.00051 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=14567 AND t.moved_to IS NULL
0.00008 SELECT search_for, replace_with FROM punbb_censoring
0.00104 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=14567 ORDER BY p.id LIMIT 0,25
0.00092 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=14567
Total query time: 0.00545 s